Chcę dodać „późny” odpowiedź, bo z trudem change
, keyup
i search
dzisiaj, a może co znalazłem w końcu mogą być użyteczne dla innych też. Zasadniczo mam panel wyszukiwania jako typ i chciałem tylko odpowiednio zareagować na nacisk małego X (pod Chrome i Opera, FF go nie implementuje) i wyczyścić okienko treści.
Miałem taki kod:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(Są oddzielne, ponieważ chciałem sprawdzić, kiedy iw jakich okolicznościach każdy został wezwany).
Okazuje się, że Chrome i Firefox reagują inaczej. W szczególności Firefox traktuje change
„każdą zmianę danych wejściowych”, podczas gdy Chrome traktuje to jako „utratę fokusu ORAZ zmianę zawartości”. Tak więc w przeglądarce Chrome funkcja „panelu aktualizacji” była wywoływana raz, na FF dwa razy po każdym naciśnięciu klawisza (jeden na keyup
, jeden na change
)
Dodatkowo wyczyszczenie pola małym X (którego nie ma pod FF) uruchomiło search
zdarzenie pod Chrome: no keyup
, no change
.
Konkluzja? Użyj input
zamiast tego:
$(some-input).on("input", function() {
// update panel
}
Działa z tym samym zachowaniem we wszystkich testowanych przeglądarkach, reagując na każdą zmianę treści wejściowej (kopiuj-wklej za pomocą myszy, autouzupełnianie i „X”).
onchange
zdarzenia?