Comment gérer le changement de case à cocher en utilisant jQuery?

106

J'ai du code

<input type="checkbox" id="chk" value="value" />
<label for="chk">Value </label>
<br/>
<input type="button" id="But1" value="set value" />
<br />
<input type="button" id="But2" value="read checked" />

javascript:

$(document).ready(function () {
    console.log("Ready ...");
    registerHandlers();

    function registerHandlers() {
        $('#But1').click(function () {
            $('#chk').prop('checked', !$('#chk').is(':checked'));
        });
        $('#But2').click(function () {
            var chk1 = $('#chk').is(':checked');
            console.log("Value : " + chk1);
        });

        $('input[type="checkbox"]').change(function () {
            var name = $(this).val();
            var check = $(this).prop('checked');
            console.log("Change: " + name + " to " + check);
        });
    }
});

Comment gérer le changement de case à cocher en utilisant jQuery? Je dois mettre le gestionnaire pour changer toutes les cases à cocher.

[mettre à jour]

Il y a une case à cocher et quelques boutons. Chaque bouton peut changer de case à cocher. Comment attraper un événement en changeant la case à cocher?

[Mettre à jour]

J'ai besoin de la case à cocher de changement de poignée dans cet exemple jsfiddle . Lorsque je clique sur la case, le bouton "OK" ne s'affiche pas.

FACTURE
la source
Je ne comprends pas vraiment votre problème? Que doit-il se passer lorsqu'une case à cocher est modifiée?
Niklas
Quel est le problème? Ce code semble fonctionner très bien
JaredPar
2
Pourriez-vous reformuler votre question? Vous avez déjà $ ('input [type = "checkbox"]'). Change handler, qu'est-ce qui ne va pas?
Madman
Si vous modifiez la case à cocher du bouton, les événements de modification ne se produisent pas
BILL
3
FYI; $('#chk').prop('checked')renvoie un booléen plutôt que la valeur de l'attribut. Voir api.jquery.com/prop
Stefan

Réponses:

163

Utilisez le :checkboxsélecteur:

$(':checkbox').change(function() {

        // do stuff here. It will fire on any checkbox change

}); 

Code: http://jsfiddle.net/s6fe9/

Samich
la source
75
... et this.checkedest très utile pour déterminer si la case est cochée ou non.
Stefan
1
Est-il possible d'enregistrer plusieurs gestionnaires?
BILL
1
Est-ce toujours recommandé en 2015?
Eugen Sunic
2
Il ne semble pas que l'API ait été modifiée, donc oui.
Samich
cela doit être à l'intérieur de $ (document) .ready (function () ... pour moi, est-ce correct?
kaya
67

Vous pouvez également utiliser l'identifiant du champ

$('#checkbox1').change(function() {
   if($(this).is(":checked")) {
      //'checked' event code
      return;
   }
   //'unchecked' event code
});
Pinkesh Sharma
la source
17

J'espère que ce serait d'une certaine aide.

$('input[type=checkbox]').change(function () {
    if ($(this).prop("checked")) {
        //do the stuff that you would do when 'checked'

        return;
    }
    //Here do the stuff you want to do when 'unchecked'
});
Lokesh Yadav
la source
6
à partir de jQuery 1.6, il vaut mieux utiliser $ (this) .prop ("checked"), car il changera dynamiquement avec l'état actuel de la case à cocher.
hrabinowitz
3
.attr ("coché") n'est pas correct, car il n'est pas mis à jour lorsque l'utilisateur clique. Je confirme le commentaire de @ hrabinowitz.
Adrien
7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});
Arjun
la source
1
Veuillez vérifier que votre propre code fonctionne avant de publier. Il y a un problème flagrant avec vos sélecteurs ...
Jonathan
live () est obsolète.
guettli
4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});
Everton ZP
la source
3
Veuillez préciser votre réponse: les solutions de code uniquement sont plus susceptibles d'être supprimées, car elles n'expliquent pas, corrigez simplement (le cas échéant).
rekaszeru
Désolé @rekaszeru, je ferai mieux la prochaine fois
Everton ZP
0

Il me semble que removeProp ne fonctionne pas correctement dans Chrome: jsfiddle

        $('#badBut1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeProp('checked');
        }else{
            $('#chk').prop('checked', true);
        }
        checkit('After');
    });
    $('#But1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeClass('checked').prop('checked',false);
        }else{
            $('#chk').addClass('checked').prop('checked', true);
        }
        checkit('After');
    });

    $('#But2').click(function () {
        var chk1 = $('#chk').is(':checked');
        console.log("Value : " + chk1);
    });

    $('#chk').on( 'change',function () {
        checkit('Result');
    });
    function checkit(moment) {
        var chk1 = $('#chk').is(':checked');
        console.log(moment+", value = " + chk1);
    };
Laurent Belloeil
la source
Comment activer une case à cocher sans événement (de l'extérieur): jsfiddle.net/k91k0sLu/1
laurent belloeil
0

obtenir la valeur radio par nom

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
Siva Anand
la source