Memeriksa penekanan tombol hanyalah solusi parsial, karena dimungkinkan untuk mengubah konten bidang input menggunakan klik mouse. Jika Anda mengklik kanan pada bidang teks, Anda akan mendapatkan opsi potong dan tempel yang dapat Anda gunakan untuk mengubah nilai tanpa menekan tombol. Demikian juga, jika pelengkapan otomatis diaktifkan, Anda dapat mengklik kiri ke dalam bidang dan mendapatkan dropdown dari teks yang dimasukkan sebelumnya, dan Anda dapat memilih di antara pilihan Anda menggunakan klik mouse. Jebakan keystroke tidak akan mendeteksi salah satu dari jenis perubahan ini.
Sayangnya, tidak ada peristiwa "perubahan" yang melaporkan perubahan dengan segera, setidaknya sejauh yang saya tahu. Namun ada solusi yang berfungsi untuk semua kasus: menyiapkan peristiwa waktu menggunakan setInterval ().
Misalkan bidang masukan Anda memiliki id dan nama "kota":
<input type="text" name="city" id="city" />
Memiliki variabel global bernama "kota":
var city = "";
Tambahkan ini ke inisialisasi halaman Anda:
setInterval(lookForCityChange, 100);
Kemudian tentukan fungsi lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
Dalam contoh ini, nilai "city" dicentang setiap 100 milidetik, yang dapat Anda sesuaikan sesuai kebutuhan. Jika Anda mau, gunakan fungsi anonim alih-alih mendefinisikan lookForCityChange (). Ketahuilah bahwa kode Anda atau bahkan browser mungkin memberikan nilai awal untuk bidang masukan sehingga Anda mungkin diberi tahu tentang "perubahan" sebelum pengguna melakukan sesuatu; sesuaikan kode Anda seperlunya.
Jika gagasan kejadian waktu yang terjadi setiap sepersepuluh detik tampak canggung, Anda dapat memulai pengatur waktu saat bidang input menerima fokus dan menghentikannya (dengan clearInterval ()) saat kabur. Saya rasa tidak mungkin mengubah nilai bidang input tanpa menerima fokus, jadi menyalakan dan mematikan pengatur waktu dengan cara ini seharusnya aman.