Если вы ожидаете этого довольно нежелательного поведения, то одним из возможных вариантов будет передача дополнительного параметра из jQuery.trigger () обработчику кликов флажка. Этот дополнительный параметр предназначен для уведомления обработчика кликов о том, что щелчок был инициирован программно, а не пользователем, непосредственно устанавливающим флажок. Затем обработчик щелчка флажка может инвертировать отчетный статус проверки.
Итак, вот как я бы инициировал событие click для флажка с идентификатором myCheckBox. Обратите внимание, что я также передаю параметр объекта с одним членом, nonUI, для которого установлено значение true:
$("#myCheckbox").trigger('click', {nonUI : true})
И вот как я обрабатываю это в обработчике события щелчка флажка. Функция обработчика проверяет наличие объекта, отличного от пользовательского интерфейса, в качестве второго параметра. (Первым параметром всегда является само событие.) Если параметр присутствует и установлен в значение 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.