Basta ya de indagar por todo internet porque estás al lugar justo, poseemos la solución que necesitas pero sin problema.
Solución:
onchange
solo se activa cuando el control está borroso. Tratar onkeypress
en cambio.
Usar .on('input'...
para monitorear cada cambio en una entrada (pegar, keyup, etc.) desde jQuery 1.7 y superior.
Para static y entradas dinámicas:
$(document).on('input', '.my-class', function()
alert('Input changed');
);
Para static solo entradas:
$('.my-class').on('input', function()
alert('Input changed');
);
JSFjugar con static/ejemplo dinámico: https://jsfiddle.net/op0zqrgy/7/
Verificar las pulsaciones de teclas es solo una solución parcial, ya que es posible cambiar el contenido de un campo de entrada con los clics del mouse. Si hace clic con el botón 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 de inmediato, al menos que yo sepa. Pero hay una solución que funciona para todos los casos: configura un evento de tiempo usando setInterval().
Digamos que su campo de entrada tiene una identificación y un nombre de “ciudad”:
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); // do whatever you need to do
En este ejemplo, el valor de “ciudad” se verifica cada 100 milisegundos, que puede ajustar según sus necesidades. Si lo desea, utilice 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 un “cambio” antes de que el usuario haga algo; ajusta tu código según sea necesario.
Si la idea de un evento de tiempo que se activa cada décima de segundo parece poco elegante, puede iniciar el temporizador cuando el campo de entrada recibe el foco y finalizarlo (con clearInterval()) cuando se 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.
Te invitamos a añadir valor a nuestro contenido informacional asistiendo con tu veteranía en las críticas.