В настоящее время я обновляю свое приложение для использования 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 продолжает вести себя таким образом в будущих версиях?