Chcę dodać „późny” odpowiedź, bo z trudem change, keyupi searchdzisiaj, 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 searchzdarzenie pod Chrome: no keyup, no change.
Konkluzja? Użyj inputzamiast 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”).
onchangezdarzenia?