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

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

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

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


当前回答

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

< 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其他做出反应

其他回答

有一个相当接近的解决方案(不修复所有粘贴方式),但他们中的大多数:

它适用于输入以及文本区域:

<input type="text" ... >
<textarea ... >...</textarea>

这样做:

<input type="text" ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >
<textarea ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >...</textarea>

就像我说的,不是所有的方法都可以在所有浏览器上粘贴一个事件…最糟糕的是,有些根本不发射任何事件,但定时器是可怕的用于这样。

但大多数粘贴方式是通过键盘和/或鼠标完成的,所以通常粘贴后会触发onkeyup或onmouseup,在键盘上输入时也会触发onkeyup。

确保你检查代码不花太多时间…否则会给用户留下不好的印象。

是的,诀窍是对键和鼠标开火…但要小心两者都可能被解雇,所以要记住这一点!!

Javascript在这里是不可预测和有趣的。

Onchange只在模糊文本框时发生 Onkeyup & onkeypress并不总是发生在文本更改 Onkeydown发生在文本更改时(但不能跟踪鼠标点击的剪切和粘贴) Onpaste & oncut发生在键盘,甚至鼠标右键单击。

因此,要跟踪文本框中的变化,我们需要onkeydown, oncut和onpaste。在这些事件的回调中,如果你检查文本框的值,那么你不会得到更新的值,因为该值在回调后发生了变化。因此,解决方案是设置一个超时函数,其超时时间为50毫秒(或更少),以跟踪更改。

这是一个肮脏的黑客,但据我研究,这是唯一的方法。

这里有一个例子。 http://jsfiddle.net/2BfGC/12/

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

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

请,判断下一个方法使用JQuery:

HTML:

<input type="text" id="inputId" />

Javascript (JQuery):

$("#inputId").keyup(function() {
    $(this).blur();
    $(this).focus();
});

$("#inputId").change(function() {
    // Do whatever you need to do on actual change of the value of the input field
});

这些天听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 >