我想在HTML文本输入字段中每次数据更改时触发一个事件,而不管焦点如何

当浏览器使用浏览器的纯HTML输入字段的自动完成function更改输入文本字段时,如何捕获客户端事件? (这是浏览器提供的输入字段的小下拉列表,我知道您可以在每个输入字段的某些浏览器中使用“autocomplete = off”禁用它。)

我已经绑定了“change / keyup”事件,但是当用户开始键入值并使用浏览器的本机自动完成function来填充字段的其余部分(并保持焦点)时,这些事件不会处理领域的。)

我知道的唯一万无一失的方法是总是捕获所有更改,无论它们是如何完成的,都是使用setInterval。 但这有点占用CPU,所以你可能想要让选择器保持最小化。

setInterval( function() { $('input').each( function() { if ($(this).val() != $(this).attr("_value")) { // Save the new value $(this).attr("_value", $(this).val()); // TODO - Handle the changed value } }); }, 100); 

令我感到惊讶的是,“改变”事件并不诚实……

无论如何, Plutor有正确的想法。 他的答案更加CPU友好的版本:

 var value, elem = $('input[name=email]')[0]; setInterval(function(){ if (elem.value !== value) { /* do something */ } value = elem.value; }, 100); 

你可以在几秒钟之后在你的函数中调用你的函数,试试这个:

 function startTime() { var today=new Date(); var h=today.getHours(); var m=today.getMinutes(); var s=today.getSeconds(); m = checkTime(m); s = checkTime(s); document.getElementById('txt').innerHTML = h+":"+m+":"+s; var t = setTimeout(function(){startTime()},500); } function checkTime(i) { if (i<10) {i = "0" + i}; // add zero in front of numbers < 10 return i; }