Wenn Sie dieses eher unerwünschte Verhalten antizipieren, besteht eine Möglichkeit darin, einen zusätzlichen Parameter aus jQuery.trigger () an den Klick-Handler des Kontrollkästchens zu übergeben. Dieser zusätzliche Parameter soll den Klick-Handler darüber informieren, dass der Klick programmgesteuert ausgelöst wurde, anstatt dass der Benutzer direkt auf das Kontrollkästchen selbst klickt. Der Klick-Handler des Kontrollkästchens kann dann den gemeldeten Prüfstatus invertieren.
So würde ich das Klickereignis für ein Kontrollkästchen mit der ID "myCheckBox" auslösen. Beachten Sie, dass ich auch einen Objektparameter mit einem einzelnen Element, nonUI, übergebe, das auf true gesetzt ist:
$("#myCheckbox").trigger('click', {nonUI : true})
Und so gehe ich damit im Click-Event-Handler des Kontrollkästchens um. Die Handlerfunktion prüft, ob das nonUI-Objekt als zweiter Parameter vorhanden ist. (Der erste Parameter ist immer das Ereignis selbst.) Wenn der Parameter vorhanden und auf true gesetzt ist, invertiere ich den gemeldeten Status .checked. Wenn kein solcher Parameter übergeben wird - was nicht der Fall ist, wenn der Benutzer einfach auf das Kontrollkästchen in der Benutzeroberfläche geklickt hat -, melde ich den tatsächlichen Status .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);
});
JSFiddle-Version unter http://jsfiddle.net/BrownieBoy/h5mDZ/
Ich habe mit Chrome, Firefox und IE 8 getestet.