2010-05-13 42 views
4

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

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

JavaScript的属性onchange不火价值变动,只有像模糊,焦点等的变化......

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

回答

11

它也并不一定是按键。由于自动完成

...和许多其他非基于键的操作,如右键单击剪切/粘贴,拖放,撤消/重做,拼写检查调整等。

HTML5定义了一个oninput事件来捕获所有直接更改。

不幸的是,浏览器今天的支持不存在(在IE中不支持,并且其他错误),所以如果你真的需要检测到输入值的所有变化早于onchange即可使用setInterval添加一个不断与前一个值进行比较的轮询器。

+0

从未来阅读,非常感谢。 – 2017-04-08 21:31:08

1

可以使用onKeyPress属性来监视用户输入的变化。

例如:

<input type='input' onKeyPress='SomeScriptMethod();'> 
+0

例如...? – Krinkle 2012-08-27 14:34:03

+0

这仍然不适用于自动完成或使用鼠标剪切/粘贴文本。 – 2012-11-20 18:32:29

2

我有一个类似的问题,绑定到十几个不同的事件只是不削减它,因为有很多不同的方式来改变输入值,因为bobince指出。

所以 - 我最终写了死的简单的jQuery监控插件,这是本质上通用的。 有了它,你可以监视输入值发生变化,textarea的文字变化,格内容的变化,等:

https://github.com/nixd3v/monitor

跟踪格内容的变化:

$.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); 
})(); 

这里做的事情 - 这保证,下一次调用在代码执行之前未做出。如果您在代码中使用轮询 - 这是正确的方式。

+0

我的尊重;)目前,但是,我没有访问一台电脑,我可以测试它:( – arik 2011-08-07 20:57:45

+2

这个github项目不再存在。 – 2012-11-20 18:30:16