Ответ 1
Используйте .triggerHandler()
вместо .trigger()
:
$('input[name=check1]').attr('checked', true).triggerHandler('click');
Кроме того, используйте .prop()
вместо .attr()
:
$('input[name=check1]').prop('checked', true).triggerHandler('click');
(если вы используете jQuery 1.6 или новее.) edit — Кроме того, поскольку я прокомментировал другой ответ, вы должны следить за странным поведением jQuery при программном запуске событий. Вот иллюстративный jsfiddle. Когда реальный "click" происходит в элементе, обработчик "click" для элемента увидит обновленное значение флага "checked" , То есть, если вы нажмете на флажок без отметки, обработчик клика увидит флаг "checked", установленный на true
. Однако, если вы запускаете "click" на флажке без проверки через jQuery, обработчик "click" увидит флаг "checked", установленный на false
! Это действительно плохо, на мой взгляд, но это всегда делалось так.
изменить снова — О, кроме того, я забыл еще одну важную (и раздражающую) jQuery странность: по неизвестным причинам API .triggerHandler()
будет вызывать обработчики только для первого совпадающего элемента. Если вы попытаетесь вызвать все флажки "click", другими словами:
$('input:checkbox').triggerHandler('click');
тогда будет запущен только первый флажок на странице. То, что я обычно делаю, чтобы справиться с безумием, связывает обработчик с моим собственным именем фальшивого события, а также "click":
$('input:checkbox').bind('click my-click', function() ... ) // or ".on()" with 1.7
Таким образом, я могу вызвать "мой клик" и получить лучшее из обоих миров: библиотека запускает обработчик всех согласованных элементов, но не переключает фактическое состояние элементов.