Saya ingin menambahkan jawaban "terlambat", karena saya berjuang dengan change
, keyup
dan search
hari ini, dan mungkin apa yang saya temukan pada akhirnya mungkin berguna bagi orang lain juga. Pada dasarnya, saya memiliki panel search-as-type, dan saya hanya ingin bereaksi dengan baik terhadap pers X kecil (di bawah Chrome dan Opera, FF tidak mengimplementasikannya), dan menghapus panel konten sebagai hasilnya.
Saya punya kode ini:
$(some-input).keyup(function() {
// update panel
}
$(some-input).change(function() {
// update panel
}
$(some-input).on("search", function() {
// update panel
}
(Mereka terpisah karena saya ingin memeriksa kapan dan dalam keadaan apa masing-masing dipanggil).
Ternyata Chrome dan Firefox bereaksi secara berbeda. Secara khusus, Firefox memperlakukan change
sebagai "setiap perubahan pada input", sementara Chrome memperlakukannya sebagai "ketika fokus hilang DAN konten berubah". Jadi, di Chrome, fungsi "panel pembaruan" dipanggil sekali, pada FF dua kali untuk setiap penekanan tombol (satu masuk keyup
, satu masuk change
)
Selain itu, membersihkan bidang dengan X kecil (yang tidak ada di bawah FF) meluncurkan search
acara di bawah Chrome: tidak keyup
, tidak change
.
Kesimpulannya? Gunakan input
sebaliknya:
$(some-input).on("input", function() {
// update panel
}
Ini bekerja dengan perilaku yang sama di bawah semua browser yang saya uji, bereaksi pada setiap perubahan konten input (salin-tempel dengan mouse, pelengkapan otomatis dan "X" termasuk).
onchange
acara?