Эта проблема возникает из-за довольно сложной проблемы с синхронизацией событий в недрах jQuery.Вот сообщение в блоге , в котором подробно обсуждается (плюс ссылка на SO-ответ, который я получил от ).
К счастью, если вы пытаетесьdo программно переключает флажок и запускает связанные функции этого флажка, 9 раз из 10 вы можете обойти все эти сложности, просто заменив привязку .click(function(){})
на привязку .change(function(){})
.
В отличие от click
, с change
связанное событие всегда будет по определению вызывать после щелчок вызвал изменение состояния флажка.Функция всегда будет видеть новое состояние флажка.
Как и click
, событие срабатывает только после того, как событие, похожее на щелчок, попадает в флажок, поэтому при манипулировании флажком с помощью js у вас все равно будет выбор:изменение состояния щелчка с помощью .attr()
и .removeAttr()
без запуска связанных функций или .click()
с помощью флажка для запуска связанных функций.