Sprawdzanie naciśnięć klawiszy jest tylko częściowym rozwiązaniem, ponieważ można zmienić zawartość pola wejściowego za pomocą kliknięć myszą. Jeśli klikniesz prawym przyciskiem myszy pole tekstowe, uzyskasz opcje wycinania i wklejania, których możesz użyć do zmiany wartości bez naciskania klawisza. Podobnie, jeśli autouzupełnianie jest włączone, możesz kliknąć lewym przyciskiem myszy w polu i wyświetlić listę rozwijaną wcześniej wprowadzonego tekstu, a także wybrać jedną z opcji za pomocą kliknięcia myszą. Funkcja zalewkowania naciśnięć klawiszy nie wykryje żadnego z tych typów zmian.
Niestety, nie ma zdarzenia „zmiany”, które natychmiast zgłasza zmiany, przynajmniej o ile wiem. Ale jest rozwiązanie, które działa we wszystkich przypadkach: skonfiguruj zdarzenie czasowe za pomocą metody setInterval ().
Załóżmy, że Twoje pole wejściowe ma identyfikator i nazwę „miasto”:
<input type="text" name="city" id="city" />
Mieć zmienną globalną o nazwie „miasto”:
var city = "";
Dodaj to do inicjalizacji swojej strony:
setInterval(lookForCityChange, 100);
Następnie zdefiniuj funkcję lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
W tym przykładzie wartość „city” jest sprawdzana co 100 milisekund, co można dostosować do własnych potrzeb. Jeśli chcesz, użyj funkcji anonimowej zamiast definiowania lookForCityChange (). Należy pamiętać, że kod, a nawet przeglądarka może udostępniać początkową wartość pola wejściowego, więc możesz zostać powiadomiony o „zmianie”, zanim użytkownik cokolwiek zrobi; odpowiednio dostosuj kod.
Jeśli pomysł zdarzenia czasowego, które ma miejsce co dziesiątą część sekundy, wydaje się niezręczny, możesz zainicjować licznik czasu, gdy pole wejściowe otrzyma fokus i zakończyć je (za pomocą clearInterval ()) po rozmyciu. Nie wydaje mi się, aby można było zmienić wartość pola wejściowego bez uzyskania fokusu, więc włączanie i wyłączanie timera w ten sposób powinno być bezpieczne.