La case à cocher jQuery click ne vérifie pas Firefox

Plus précisément, une case à cocher en mémoire dom de type d’entrée ne reçoit pas l’atsortingbut “vérifié” (ou tout autre indicateur vérifié) dans FireFox.

La ligne commentée peut être supprimée pour que le test réussisse, mais actuellement, le test échoue dans Firefox.

http://jsfiddle.net/mE3xb/2/

var cb = $('') //var cb = $('input'); if (cb.is(':checked')) alert("checkbox says it's already checked"); cb.click(); if (cb.is(':checked')) alert("checkbox clicked correctly!"); else alert("fail!"); 

Est-ce que je fais des choses non standard? Aucun conseil? Je me fie essentiellement à jQuery .click pour cocher ma case dans l’interface utilisateur (et je ne veux pas utiliser .attr, .prop, .val car cela brisera la belle encapsulation que j’ai eue.)

Puisque vous utilisez jQuery 1.4.3, il semble que votre meilleur pari sera:

 cb[0].setAtsortingbute('checked', 'checked'); // plain old vanilla JS 

jsFiddle Demo – testé dans FireFox & Chrome & IE8

.click() ne fonctionne pas dans de nombreuses situations étranges dans Firefox (c’est quelque chose de fondamentalement faux / différent dans ce navigateur). J’imagine que, parce qu’il n’est pas encore disponible sur le DOM, il ne sait pas où cet événement se déroulerait. C’est l’une des nombreuses raisons pour lesquelles des choses comme .prop() existent, etc.

Utilisez cb.prop('checked', true) au lieu de cb.click() pour vérifier vos cases à cocher

Fiddle a mis à jour http://jsfiddle.net/mE3xb/7/

Je sais que c’est une vieille question, mais je suis tombé sur une réponse qui a fonctionné pour moi pour mon test unitaire:

Tout d’abord, je bascule la propriété cochée:

 checkbox4[0].checked = !checkbox4[0].checked; 

Puis après cela, je déclenche “juste” le gestionnaire de clics (en utilisant sortingggerHandler, il ne coche pas / décoche la case à nouveau dans les autres navigateurs)

 checkbox4.sortingggerHandler( "click" ); 

Ceci simule un utilisateur en “cliquant” sur la case à cocher et en cochant / décochant cette case. Pas aussi encapsulé que vous pourriez le souhaiter pour vos besoins (à la lecture des commentaires et réponses ci-dessus), mais il semble que le travail effectué soit légèrement plus approfondi que la réponse actuellement acceptée.