Обновление: это относится только к jQuery 1.8 и ниже. Это было исправлено в jQuery 1.9.
Вот мой минимальный пример jsfiddle: http://jsfiddle.net/8fuEJ/. Я использую Google Chrome, если это имеет значение.
У меня есть флажок:
<input type="checkbox" id="wtf">
И у меня есть обработчик событий jquery:
$('#wtf').click(function(ev) { alert(this.checked); });
До сих пор так хорошо. Когда я нажимаю этот флажок, я сначала вижу галочку, а затем предупреждение "true" (в этом порядке). Когда я снова нажимаю на него, я вижу, что галочка исчезает, а затем предупреждение "false".
Проблема возникает, когда я программно запускаю событие click. Вот так:
$('#wtf').click(function(ev) { alert(this.checked); });
$('#wtf').click();
В этом случае сначала я вижу предупреждение "false" (с галочкой еще не видно), а затем после отклонения предупреждения появляется галочка.
Почему здесь разница в порядке?
Также обратите внимание, что если я использую обработчик событий change
, он работает как ожидалось.
$('#wtf').change(function(ev) { alert(this.checked); });
$('#wtf').click();
Здесь я вижу галочку, а затем предупреждение "true".