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.

bikey77
la source
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();"/>
Senad Meškin
la source
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" />

Vic
la source
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();
    }
});
Liangliang Zheng
la source
19

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

SergeS
la source
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
    }
});
Eugène
la source
4

HTML:

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

JS:

function handleChange(e) {
     const {checked} = e.target;
}
Ali Kleit
la source
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
    }
};
Bart
la source
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.

Bruce Tong
la source
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()">

0x1ad2
la source
0

essayer

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

Kamil Kiełczewski
la source