Kiểm tra tổ hợp phím chỉ là giải pháp một phần, vì có thể thay đổi nội dung của trường nhập bằng cách nhấp chuột. Nếu bạn nhấp chuột phải vào trường văn bản, bạn sẽ có các tùy chọn cắt và dán mà bạn có thể sử dụng để thay đổi giá trị mà không cần gõ phím. Tương tự như vậy, nếu tính năng tự động điền được bật thì bạn có thể nhấp chuột trái vào một trường và nhận được danh sách thả xuống của văn bản đã nhập trước đó và bạn có thể chọn trong số các lựa chọn của mình bằng cách nhấp chuột. Tính năng bẫy phím sẽ không phát hiện được một trong hai loại thay đổi này.
Đáng buồn là không có sự kiện "onchange" nào báo cáo các thay đổi ngay lập tức, ít nhất là theo như tôi biết. Nhưng có một giải pháp phù hợp với mọi trường hợp: thiết lập sự kiện định thời bằng cách sử dụng setInterval ().
Giả sử trường nhập của bạn có id và tên là "thành phố":
<input type="text" name="city" id="city" />
Có một biến toàn cục có tên "city":
var city = "";
Thêm cái này vào phần khởi tạo trang của bạn:
setInterval(lookForCityChange, 100);
Sau đó, xác định một hàm lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
Trong ví dụ này, giá trị của "thành phố" được kiểm tra cứ sau 100 mili giây, bạn có thể điều chỉnh giá trị này theo nhu cầu của mình. Nếu bạn thích, hãy sử dụng một hàm ẩn danh thay vì xác định lookForCityChange (). Lưu ý rằng mã của bạn hoặc thậm chí trình duyệt có thể cung cấp giá trị ban đầu cho trường đầu vào để bạn có thể được thông báo về "thay đổi" trước khi người dùng thực hiện bất kỳ điều gì; điều chỉnh mã của bạn nếu cần.
Nếu ý tưởng về một sự kiện thời gian xảy ra mỗi phần mười giây có vẻ vô duyên, bạn có thể khởi tạo bộ hẹn giờ khi trường đầu vào nhận được tiêu điểm và kết thúc nó (với clearInterval ()) khi bị mờ. Tôi không nghĩ rằng có thể thay đổi giá trị của trường đầu vào mà nó không nhận tiêu điểm, vì vậy việc bật và tắt bộ hẹn giờ theo cách này sẽ an toàn.