2011-02-06 11 views
2

Comme la plupart des gens le savent, il existe au moins deux moyens (faciles) de savoir si une case est cochée.Comment savoir si une case est cochée?

($('#checkbox:checked').val() != undefined) OU ($('#checkbox').val() == 'on')

Laquelle de ces deux méthodes est le mieux? Pourquoi?

+2

La valeur d'une case à cocher n'est pas nécessairement "on": s'il y a un attribut "value", ce sera ce que vous obtenez. – bart

Répondre

6

Je pense que

$('#checkbox').is(':checked'); 

est le chemin à parcourir.

+1

re: pourquoi - parce qu'il évalue automatiquement à un booléen vrai/faux – mVChr

+0

Merci mVChr - J'ai oublié d'ajouter l'explication. – Jan

+1

Juste pour ajouter, il y a aussi 'if ($ (" # checkbox: checked "). Length)'. – karim79

2

Une autre façon

if ($('#myCheckbox').attr("checked")) { .. } 

... Quoi qu'il en soit, je ne pense pas que l'un d'entre eux est nécessairement meilleur ou pour le pire. jQuery est conçu pour fonctionner à travers les navigateurs de sorte que l'un d'entre eux devrait fonctionner. Je ne suis pas sûr que quelqu'un ait pris le temps de les comparer à la performance ou quoi que ce soit ... faites ce que vous jugez le plus lisible.

+0

cela ne fonctionne plus dans jquery 1.9+; vous devez utiliser $ ('# myCheckbox'). prop ('checked') – hubert

6

Si vous accédez à l'élément brut, vous devriez être en mesure d'utiliser quelque chose comme:

this.checked 

Mais je ne sais pas s'il pourrait y avoir des problèmes de compatibilité entre navigateurs avec cette méthode.

+1

Ceci est bien dans le contexte d'un gestionnaire d'événements, et plus court que d'utiliser le filtre 'is', par ex. '$ (" # foo "). change (function() {if (this.checked) {...}}); '- et non, c'est parfaitement cross-navigateur. – karim79

+1

Vous pouvez accéder à l'élément brut en traitant l'objet jQuery comme un tableau, en utilisant: un index numérique. '$ ('# checkbox') [0] .checked' * va * fonctionner. – bart

Questions connexes