Если вы ожидаете это довольно нежелательное поведение, то одним из способов будет передача дополнительного параметра из jQuery.trigger () в обработчик щелчков флажка. Этот дополнительный параметр должен уведомлять обработчик кликов о том, что щелчок был инициирован программно, а не пользователем, непосредственно нажимающим на сам флажок. Затем обработчик щелчков флажка может инвертировать сообщенный статус проверки.
Итак, вот как я бы инициировал событие click для флажка с идентификатором «myCheckBox». Обратите внимание, что я также передаю параметр объекта с одним членом, nonUI, который имеет значение true:
$("#myCheckbox").trigger('click', {nonUI : true})
А вот как я справляюсь с этим в обработчике события щелчка флажка. Функция-обработчик проверяет наличие объекта nonUI в качестве второго параметра. (Первым параметром всегда является само событие.) Если параметр присутствует и имеет значение true, тогда я инвертирую сообщенное состояние .checked. Если такой параметр не передается - чего не будет, если пользователь просто нажмет на флажок в пользовательском интерфейсе - тогда я сообщу о фактическом состоянии .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 на http://jsfiddle.net/BrownieBoy/h5mDZ/
Я тестировал с Chrome, Firefox и IE 8.