Verificar se há pressionamentos de tecla é apenas uma solução parcial, porque é possível alterar o conteúdo de um campo de entrada usando cliques do mouse. Se você clicar com o botão direito em um campo de texto, terá opções de recortar e colar que podem ser usadas para alterar o valor sem pressionar uma tecla. Da mesma forma, se o preenchimento automático estiver habilitado, você pode clicar com o botão esquerdo em um campo e obter uma lista suspensa do texto inserido anteriormente, e pode selecionar entre suas opções usando um clique do mouse. A captura de pressionamento de tecla não detectará nenhum desses tipos de alterações.
Infelizmente, não há evento "onchange" que relata mudanças imediatamente, pelo menos até onde eu sei. Mas existe uma solução que funciona para todos os casos: configure um evento de temporização usando setInterval ().
Digamos que seu campo de entrada tenha um id e nome de "cidade":
<input type="text" name="city" id="city" />
Possui uma variável global chamada "cidade":
var city = "";
Adicione isto à inicialização da sua página:
setInterval(lookForCityChange, 100);
Em seguida, defina uma função lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
Neste exemplo, o valor de "cidade" é verificado a cada 100 milissegundos, que você pode ajustar de acordo com suas necessidades. Se desejar, use uma função anônima em vez de definir lookForCityChange (). Esteja ciente de que seu código ou mesmo o navegador pode fornecer um valor inicial para o campo de entrada, portanto, você pode ser notificado sobre uma "mudança" antes que o usuário faça qualquer coisa; ajuste seu código conforme necessário.
Se a ideia de um evento de temporização disparando a cada décimo de segundo parecer deselegante, você pode iniciar o temporizador quando o campo de entrada receber o foco e encerrá-lo (com clearInterval ()) em um desfoque. Não acho que seja possível alterar o valor de um campo de entrada sem que ele receba o foco, portanto, ligar e desligar o cronômetro dessa forma deve ser seguro.