Lorsque je lie une fonction à un élément de case à cocher comme:
$("#myCheckbox").click( function() {
alert($(this).is(":checked"));
});
La case à cocher modifie son attribut coché avant que l'événement ne soit déclenché, c'est le comportement normal et donne un résultat inverse.
Cependant, quand je fais:
$("#myCheckbox").click();
La case à cocher modifie l'attribut coché après le déclenchement de l'événement.
Ma question est la suivante: existe-t-il un moyen de déclencher l'événement de clic à partir de jQuery comme le ferait un clic normal (premier scénario)?
PS: j'ai déjà essayé avec trigger('click')
;
Réponses:
Remarque: dans les anciennes versions de jquery, il était possible de l'utiliser
attr
. Maintenant, il est suggéré d'utiliserprop
pour lire l'état.la source
Il existe une solution de contournement qui fonctionne dans jQuery 1.3.2 et 1.4.2 :
Mais je suis d'accord, ce comportement semble bogué par rapport à l'événement natif.
la source
Depuis juin 2016 (en utilisant jquery 2.1.4) aucune des autres solutions suggérées ne fonctionne. La vérification
attr('checked')
revient toujoursundefined
etis('checked)
revient toujoursfalse
.Utilisez simplement la méthode prop:
la source
is('checked)
retournera faux car "vérifié" n'est pas un pseudo-sélecteur CSS. Le bon devrait êtreis(':checked')
donc il recherche ": vérifié" à la place.Je rencontre toujours ce comportement avec jQuery 1.7.2. Une solution simple consiste à différer l'exécution du gestionnaire de clics avec setTimeout et à laisser le navigateur faire sa magie en attendant:
la source
.click()
, puis définir.attr('value', 'true')
, puis.change()
,.blur()
avant de définir la boîte par programme lorsque je cliquais sur le bouton "Mettre à jour" par programme ....Si vous prévoyez ce comportement plutôt indésirable, alors un autre serait de passer un paramètre supplémentaire du jQuery.trigger () au gestionnaire de clics de la case à cocher. Ce paramètre supplémentaire consiste à informer le gestionnaire de clics que le clic a été déclenché par programme, plutôt que par l'utilisateur cliquant directement sur la case à cocher elle-même. Le gestionnaire de clics de la case à cocher peut alors inverser l'état de vérification signalé.
Alors, voici comment je déclencherais l'événement de clic sur une case à cocher avec l'ID "myCheckBox". Notez que je passe également un paramètre d'objet avec un seul membre, nonUI, qui est défini sur true:
Et voici comment je gère cela dans le gestionnaire d'événements click de la case à cocher. La fonction de gestionnaire vérifie la présence de l'objet nonUI comme deuxième paramètre. (Le premier paramètre est toujours l'événement lui-même.) Si le paramètre est présent et défini sur true, j'inverse l'état .checked signalé. Si aucun paramètre de ce type n'est transmis - ce qui ne sera pas le cas si l'utilisateur a simplement cliqué sur la case à cocher dans l'interface utilisateur - alors je signale l'état réel .checked:
Version JSFiddle sur http://jsfiddle.net/BrownieBoy/h5mDZ/
J'ai testé avec Chrome, Firefox et IE 8.
la source
la source
la source
JSFIDDLE
la source
Eh bien, pour correspondre au premier scénario, c'est quelque chose que j'ai proposé.
http://jsbin.com/uwupa/edit
Essentiellement, au lieu de lier l'événement "click", vous liez l'événement "change" à l'alerte.
Ensuite, lorsque vous déclenchez l'événement, vous déclenchez d'abord le clic, puis le changement.
la source
En plus de la réponse de Nick Craver, pour que cela fonctionne correctement,
IE 8
vous devez ajouter un gestionnaire de clics supplémentaire à la case à cocher:Sinon, le rappel ne sera déclenché que lorsque la case à cocher perd le focus, car il
IE 8
garde le focus sur les cases à cocher et les radios lorsque vous cliquez dessus.Je n'ai pas testé sur
IE 9
cependant.la source
la source
change
place des OPclick
, et utilise simplement uneif
instruction comme une manière différente de tester:checked
.Le moyen le plus rapide et le plus simple :
$ el - est l'élément jquery de la sélection.
Prendre plaisir!
la source
la source