Я хочу добавить «поздний» ответ, потому что я боролся с change
, keyup
и search
сегодня, и, возможно, то, что я нашел в конце, может быть полезным и для других.
По сути, у меня есть панель поиска по типу, и я просто хотел правильно отреагировать на нажатие маленькой буквы X (в Chrome и Opera она не реализована в FF) и в результате очистить панель содержимого.
У меня был этот код:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(Они раздельные, потому что я хотел проверить, когда и при каких обстоятельствах каждый из них был вызван).
Оказывается, что Chrome и Firefox реагируют по-разному.
В частности, Firefox рассматривает change
как «каждое изменение ввода», в то время как Chrome обрабатывает его как «когда фокус потерян и содержимое изменено».
Таким образом, в Chrome функция «панели обновления» вызывалась один раз, в FF - дважды для каждого нажатия клавиши (один в keyup
, один в change
)
Кроме того, очистка поля с маленьким X (которого нет в FF) вызвала событие search
в Chrome: нет keyup
, нет change
.
Заключение? Используйте input
вместо:
$(some-input).on("input", function() {
// update panel
}
Он работает с одинаковым поведением во всех протестированных мною браузерах, реагируя на каждое изменение входного содержимого (копирование-вставка с помощью мыши, автозаполнение и "X").