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:
$("#myCheckbox").trigger('click', {nonUI : 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:
$("#myCheckbox").click(function(e, parameters) {
var nonUI = false;
try {
nonUI = parameters.nonUI;
} catch (e) {}
var checked = nonUI ? !this.checked : this.checked;
alert('Checked = ' + checked);
});
Version JSFiddle sur http://jsfiddle.net/BrownieBoy/h5mDZ/
J'ai testé avec Chrome, Firefox et IE 8.