HTML输入值的变化

时间:2010-05-13 11:06:27

标签: html events input

我有一个输入标签。此标记没有关闭自动完成功能,因此,不一定需要释放键来更改此字段的值并关注另一个字段。我的问题是:如何检测此特定字段的任何值更改,例如e。 G。

<input onvaluechange="//do following..." />

JavaScript属性onchange不会触发值的更改,仅适用于模糊,焦点等更改...

编辑:它也不一定是关键的新闻。由于自动完成,用户只需鼠标单击自动完成结果即可更改值。这不会触发onkeydown事件。

4 个答案:

答案 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();'>