Il controllo delle sequenze di tasti è solo una soluzione parziale, poiché è possibile modificare il contenuto di un campo di input utilizzando i clic del mouse. Se fai clic con il pulsante destro del mouse in un campo di testo, avrai a disposizione opzioni taglia e incolla che puoi utilizzare per modificare il valore senza premere alcun tasto. Allo stesso modo, se il completamento automatico è abilitato, puoi fare clic con il pulsante sinistro del mouse in un campo e ottenere un menu a discesa del testo inserito in precedenza, e puoi selezionare tra le tue scelte usando un clic del mouse. Il trapping delle sequenze di tasti non rileverà nessuno di questi tipi di modifiche.
Purtroppo, non esiste alcun evento "onchange" che segnala i cambiamenti immediatamente, almeno per quanto ne so. Ma c'è una soluzione che funziona per tutti i casi: imposta un evento di temporizzazione usando setInterval ().
Supponiamo che il tuo campo di immissione abbia un ID e un nome di "città":
<input type="text" name="city" id="city" />
Avere una variabile globale denominata "città":
var city = "";
Aggiungi questo alla tua inizializzazione della pagina:
setInterval(lookForCityChange, 100);
Quindi definire una funzione lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
In questo esempio, il valore di "città" viene verificato ogni 100 millisecondi, che puoi regolare in base alle tue esigenze. Se vuoi, usa una funzione anonima invece di definire lookForCityChange (). Tieni presente che il tuo codice o anche il browser potrebbe fornire un valore iniziale per il campo di input, quindi potresti essere avvisato di una "modifica" prima che l'utente faccia qualsiasi cosa; modificare il codice secondo necessità.
Se l'idea di un evento di temporizzazione che si attiva ogni decimo di secondo sembra sgraziata, puoi avviare il timer quando il campo di input riceve il focus e terminarlo (con clearInterval ()) su una sfocatura. Non credo sia possibile modificare il valore di un campo di input senza che riceva il focus, quindi accendere e spegnere il timer in questo modo dovrebbe essere sicuro.