La verificación de las pulsaciones de teclas es solo una solución parcial, porque es posible cambiar el contenido de un campo de entrada mediante clics del mouse. Si hace clic derecho en un campo de texto, tendrá opciones de cortar y pegar que puede usar para cambiar el valor sin presionar una tecla. Del mismo modo, si la función de autocompletar está habilitada, puede hacer clic con el botón izquierdo en un campo y obtener un menú desplegable del texto ingresado anteriormente, y puede seleccionar entre sus opciones con un clic del mouse. La captura de pulsaciones de teclas no detectará ninguno de estos tipos de cambios.
Lamentablemente, no hay ningún evento "onchange" que informe los cambios inmediatamente, al menos hasta donde yo sé. Pero hay una solución que funciona para todos los casos: configure un evento de tiempo usando setInterval ().
Digamos que su campo de entrada tiene una identificación y un nombre de "ciudad":
<input type="text" name="city" id="city" />
Tener una variable global llamada "ciudad":
var city = "";
Agregue esto a la inicialización de su página:
setInterval(lookForCityChange, 100);
Luego defina una función lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
En este ejemplo, el valor de "ciudad" se comprueba cada 100 milisegundos, que puede ajustar según sus necesidades. Si lo desea, use una función anónima en lugar de definir lookForCityChange (). Tenga en cuenta que su código o incluso el navegador pueden proporcionar un valor inicial para el campo de entrada, por lo que es posible que se le notifique de un "cambio" antes de que el usuario haga algo; ajuste su código según sea necesario.
Si la idea de que un evento de temporización se active cada décima de segundo parece desgarbada, puede iniciar el temporizador cuando el campo de entrada recibe el foco y terminarlo (con clearInterval ()) en un desenfoque. No creo que sea posible cambiar el valor de un campo de entrada sin que reciba el foco, por lo que encender y apagar el temporizador de esta manera debería ser seguro.