В настоящее время я обновляю свое приложение для использования jQuery 1.6.1 (ранее использующего 1.4.4) и обнаружил, что теперь событие .click()
автоматически запускает событие .change()
.
Я создал простой пример здесь: http://jsfiddle.net/wDKPN/
Обратите внимание, если вы включите 1.4.4, функция .change()
будет не при срабатывании события .click()
. Но при переключении на 1.6 событие .change()
срабатывает при срабатывании .click()
.
Два вопроса:
-
Является ли это ошибкой? Кажется, что программный запуск
.click()
не должен также запускать другие события (например, было бы неправильно также автоматически запускать.blur()
и.focus()
, чтобы помочь "имитировать" щелчок пользователя). -
Каков правильный способ привязки события
change()
, а затем запускать как событиеclick()
, так иchange()
для этого элемента? Я просто вызываю.click()
и полагаться на то, что.change()
также будет срабатывать?$('#myelement').change(function() { // do some stuff }); $('#myelement').click(); // both click and change will fire, yay!
В моем старом коде я использую этот шаблон для инициализации некоторых флажков (и их проверенных состояний и значений) после вызова ajax:
$('#myelement').change(function() {
// do some stuff including ajax work
}).click().change();
Но в 1.6.1 моя логика срабатывает дважды (один раз для .click()
и один раз для .change()
). Могу ли я полагаться только на удаление триггера .change()
и надеюсь, что jQuery продолжает вести себя таким образом в будущих версиях?