Case à cocher Javascript activée


130

J'ai une case à cocher dans un formulaire et j'aimerais qu'il fonctionne selon le scénario suivant:

  • si quelqu'un le vérifie, la valeur d'un champ de texte ( totalCost) doit être définie sur 10.
  • puis, si je reviens et décoche, une fonction calculate()définit la valeur de en totalCostfonction d'autres paramètres du formulaire.

Donc, fondamentalement, j'ai besoin de la partie où, lorsque je coche la case, je fais une chose et lorsque je la décoche, j'en fais une autre.


Checkboxid.Checked == true / false {Écrivez votre événement}.
Naresh

Réponses:


150
function calc()
{
  if (document.getElementById('xxx').checked) 
  {
      document.getElementById('totalCost').value = 10;
  } else {
      calculate();
  }
}

HTML

<input type="checkbox" id="xxx" name="xxx" onclick="calc();"/>

30
Et si l'utilisateur utilise le clavier?
thomthom

6
Voici un JsFiddle où toutes les différentes manières peuvent être testées: clic, clavier, étiquette et clé d'accès. Ils déclenchent tous l'événement dans Firefox.
Roman Starkov

4
Malheureusement, l'événement n'est pas déclenché lorsque l'état de la case à cocher est modifié via JavaScript.
StanE

2
lol, utilisez ceci depuis javascript $ ('# checkbox'). attr ('checked', 'checked'); $ ('# case à cocher'). click ();
Senad Meškin

5
Vous devriez plutôt utiliser onchange, il est spécialement conçu pour le cas d'utilisation de l'OP. (merci ReeCube ci-dessous pour le lien) developer.mozilla.org/en-US/docs/Web/Events/change
Armando

90

JavaScript pur:

const checkbox = document.getElementById('myCheckbox')

checkbox.addEventListener('change', (event) => {
  if (event.target.checked) {
    alert('checked');
  } else {
    alert('not checked');
  }
})
My Checkbox: <input id="myCheckbox" type="checkbox" />


28

Si vous utilisez jQuery .. alors je peux suggérer ce qui suit: REMARQUE: j'ai fait une hypothèse ici

$('#my_checkbox').click(function(){
    if($(this).is(':checked')){
        $('input[name="totalCost"]').val(10);
    } else {
        calculate();
    }
});

19

Utilisez un événement onclick, car chaque clic sur une case à cocher le change réellement.


29
Et si l'utilisateur utilise le clavier?
thomthom

14
C'est strage, mais c'est toujours un clic
SergeS

6
En effet, le clic fonctionne, il est même déclenché lorsque vous utilisez une étiquette pour activer la case à cocher. Mais vous devriez mieux utiliser l'événement «changement»! L'événement 'change' est destiné à cela: developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube

Et le double-clic?
Chalky

4
Eh bien, c'est deux clics maintenant, n'est-ce pas?
Rohmer

13

La solution suivante utilise jquery. Supposons que vous ayez une case à cocher avec l'ID de checkboxId.

const checkbox = $("#checkboxId");

checkbox.change(function(event) {
    var checkbox = event.target;
    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
});

4

HTML:

<input type="checkbox" onchange="handleChange(event)">

JS:

function handleChange(e) {
     const {checked} = e.target;
}

3

Faites référence à la case à cocher par son identifiant et non par # Assignez la fonction à l'attribut onclick plutôt que d'utiliser l'attribut change

var checkbox = $("save_" + fieldName);
checkbox.onclick = function(event) {
    var checkbox = event.target;

    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
};

1

Je sais que cela semble être une réponse noob mais je la mets ici pour qu'elle puisse aider les autres à l'avenir.

Supposons que vous construisiez une table avec une boucle foreach. Et en même temps, ajouter des cases à cocher à la fin.

<!-- Begin Loop-->
<tr>
 <td><?=$criteria?></td>
 <td><?=$indicator?></td>
 <td><?=$target?></td>
 <td>
   <div class="form-check">
    <input type="checkbox" class="form-check-input" name="active" value="<?=$id?>" <?=$status?'checked':''?>> 
<!-- mark as 'checked' if checkbox was selected on a previous save -->
   </div>
 </td>
</tr>
<!-- End of Loop -->

Vous placez un bouton sous le tableau avec une entrée masquée:

<form method="post" action="/goalobj-review" id="goalobj">

 <!-- we retrieve saved checkboxes & concatenate them into a string separated by commas.i.e. $saved_data = "1,2,3"; -->

 <input type="hidden" name="result" id="selected" value="<?= $saved_data ?>>
 <button type="submit" class="btn btn-info" form="goalobj">Submit Changes</button>
</form>

Vous pouvez écrire votre script comme ceci:

<script type="text/javascript">
    var checkboxes = document.getElementsByClassName('form-check-input');
    var i;
    var tid = setInterval(function () {
        if (document.readyState !== "complete") {
            return;
        }
        clearInterval(tid);
    for(i=0;i<checkboxes.length;i++){
        checkboxes[i].addEventListener('click',checkBoxValue);
    }
    },100);

    function checkBoxValue(event) {
        var selected = document.querySelector("input[id=selected]");
        var result = 0;
        if(this.checked) {

            if(selected.value.length > 0) {
                result = selected.value + "," + this.value;
                document.querySelector("input[id=selected]").value = result;
            } else {
                result = this.value;
                document.querySelector("input[id=selected]").value = result;
            }
        }
        if(! this.checked) { 

// trigger if unchecked. if checkbox is marked as 'checked' from a previous saved is deselected, this will also remove its corresponding value from our hidden input.

            var compact = selected.value.split(","); // split string into array
            var index = compact.indexOf(this.value); // return index of our selected checkbox
            compact.splice(index,1); // removes 1 item at specified index
            var newValue = compact.join(",") // returns a new string
            document.querySelector("input[id=selected]").value = newValue;
        }

    }
</script>

Les identifiants de vos cases à cocher seront soumis sous forme de chaîne "1,2" dans la variable de résultat. Vous pouvez ensuite le diviser au niveau du contrôleur comme vous le souhaitez.


0

Javascript

  // on toggle method
  // to check status of checkbox
  function onToggle() {
    // check if checkbox is checked
    if (document.querySelector('#my-checkbox').checked) {
      // if checked
      console.log('checked');
    } else {
      // if unchecked
      console.log('unchecked');
    }
  }

HTML

<input id="my-checkbox" type="checkbox" onclick="onToggle()">


0

essayer

totalCost.value = checkbox.checked ? 10 : calculate();

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.