根据我的经验,input type="text" onchange事件通常只发生在你离开(模糊)控件之后。

有办法迫使浏览器触发onchange每次文本字段内容的变化?如果不是,那么“手动”跟踪这种情况的最佳方法是什么?

使用onkey* events是不可靠的,因为您可以右键单击字段并选择粘贴,这将在没有任何键盘输入的情况下更改字段。

setTimeout是唯一的方法吗?丑:-)


当前回答

我有一个类似的需求(twitter样式的文本字段)。使用onkeyup和onchange。Onchange实际上负责在字段失去焦点时的鼠标粘贴操作。

[更新]在HTML5或更高版本中,使用oninput获取实时字符修改更新,如上面的其他答案所解释。

其他回答

2018年到了,我是这么做的:

$(inputs).on('change keydown paste input propertychange click keyup blur',handler);

如果你能指出这种方法的缺陷,我会很感激。

您也可以使用按下键、按上键和按下键事件。

要跟踪每一个,请尝试这个示例,并在此之前将光标闪烁率完全降低到零。

< body > -试试onkeydown、onkeyup onkeypress <输入类型=“文本”“> <跨越> < /跨越> < >脚本 我的功能(瓦尔) /警报(val); var mySpan =文档. getelementsby mySpan += val+"<br>"; 文件。getElementsByTagName(“跨越”)[0 - 9]。内html = mySpan; 的 剧本< - > < / body >

Onblur:退出时生成事件

Onchange:如果在输入文本中做了任何更改,则在退出时生成事件

Onkeydown:在任何按键时产生事件(对于长时间按住键也一样)

Onkeyup:在任何密钥释放时生成事件

Onkeypress:与onkeydown(或onkeyup)相同,但不会对ctrl,backsace,alt其他做出反应

我有一个类似的需求(twitter样式的文本字段)。使用onkeyup和onchange。Onchange实际上负责在字段失去焦点时的鼠标粘贴操作。

[更新]在HTML5或更高版本中,使用oninput获取实时字符修改更新,如上面的其他答案所解释。

这些天听oninput。感觉就像在改变,而不需要失去对元素的关注。它是HTML5。

除了IE8及以下版本,所有人(甚至是移动设备)都支持它。为IE添加onpropertychange。我是这样使用的:

const source = document.getElementById('source'); const result = document.getElementById('result'); const inputHandler =函数(e) { 结果。innerHTML = e.target.value; } 源。addEventListener(“输入”,inputHandler); 源。addEventListener (propertychange, inputHandler);//用于IE8 // Firefox/Edge18-/IE9+不启动<select><option> . // / /源。addEventListener(‘改变’,inputHandler); <输入id = "源" > < div id = "结果" > < / div >