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