Jeśli spodziewasz się tego raczej niepożądanego zachowania, jednym z rozwiązań byłoby przekazanie dodatkowego parametru z jQuery.trigger () do modułu obsługi kliknięcia pola wyboru. Ten dodatkowy parametr służy do powiadamiania modułu obsługi kliknięcia, że kliknięcie zostało uruchomione programowo, a nie przez bezpośrednie kliknięcie pola wyboru przez użytkownika. Moduł obsługi kliknięcia pola wyboru może następnie odwrócić zgłoszony stan sprawdzenia.
Oto jak wywołać zdarzenie kliknięcia pola wyboru o identyfikatorze „myCheckBox”. Zauważ, że przekazuję również parametr obiektu z pojedynczym składnikiem, nonUI, który jest ustawiony na true:
$("#myCheckbox").trigger('click', {nonUI : true})
A oto jak sobie z tym radzę w module obsługi zdarzeń kliknięcia pola wyboru. Funkcja obsługi sprawdza obecność obiektu nonUI jako drugiego parametru. (Pierwszym parametrem jest zawsze samo zdarzenie). Jeśli parametr jest obecny i ma wartość true, odwracam zgłoszony stan .checked. Jeśli nie zostanie przekazany żaden taki parametr - czego nie będzie, jeśli użytkownik po prostu kliknie pole wyboru w interfejsie użytkownika - zgłaszam rzeczywisty stan .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);
});
Wersja JSFiddle na http://jsfiddle.net/BrownieBoy/h5mDZ/
Testowałem z Chrome, Firefox i IE 8.