我有一个输入标签。此标记没有关闭自动完成功能,因此,不一定需要释放键来更改此字段的值并关注另一个字段。我的问题是:如何检测此特定字段的任何值更改,例如e。 G。
<input onvaluechange="//do following..." />
JavaScript属性onchange
不会触发值的更改,仅适用于模糊,焦点等更改...
onkeydown
事件。
答案 0 :(得分:11)
它也不一定是关键的新闻。由于自动完成
...以及许多其他非基于键的操作,例如右键单击剪切/粘贴,拖放,撤消/重做,拼写检查调整等。
HTML5定义了一个oninput
事件来捕获所有直接更改。
不幸的是,今天的浏览器支持不存在(IE中没有支持,其他版本也有一些错误),所以如果你真的需要检测到输入值的所有更改都早于onchange
,那么你可以做是使用setInterval
添加一个不断与之前的值进行比较的轮询器。
答案 1 :(得分:3)
答案 2 :(得分:2)
我有一个类似的问题,绑定到十几个不同的事件只是没有削减它,因为有很多不同的方式来改变输入值,如 bobince 所述。
所以 - 我最终编写了死的简单jQuery监控插件,它本质上是通用的。 有了它,您可以监控输入值更改,文本区域文本更改,div内容更改等:
https://github.com/nixd3v/monitor
跟踪div内容更改:
$.monitor('add', function(){return $("div#someDiv").html()}, function(){
console.log('Div content changed');
});
跟踪输入值更改:
$.monitor('add', function(){return $("#password").val()}, function(){
console.log('input value changed');
});
它当然也使用循环,但不是通过 setInterval ,而是通过使用setTimeout和自执行的匿名函数:
(function(){
// do some stuff
setTimeout(arguments.callee, 100);
})();
这样做 - 这可以保证在执行代码之前不会进行下一次调用。如果在代码中使用轮询 - 这是正确的方法。
答案 3 :(得分:1)
您可以使用onKeyPress
属性来监控用户输入的更改。
例如:
<input type='input' onKeyPress='SomeScriptMethod();'>