文本输入控件中任何文本更改的正确javascript事件是什么?

时间:2012-04-25 06:13:32

标签: javascript events text input onchange

每当输入控件中的文本发生变化时,我都需要立即更新一些内容。但我似乎无法为此找到正确的事件。

  • onchange仅在您离开输入框时触发(即标签离开或点击外部)。

  • onkeypress在进行更改之前触发,并在任何键按下时触发(例如,光标左侧和右侧不会导致任何文本改变)

  • onkeydown和onkeyup也会激活任何键(即使像Shift等,也不会导致任何文本更改)

此外,当用鼠标右键单击+从剪贴板粘贴时,这些似乎都不会触发。或者在JS中更改值时(即,输入input.value =来自其他地方的东西)。

最小例子:http://jsfiddle.net/nggAm/

我该怎么办?我想我可能解决这个问题的方法(好吧,大多数情况下)是将ALL事件设置为一个通用事件处理程序,在那里缓存值,并且仅在更改字符串时执行实际更新。但这感觉有点糟糕。 正确这样做的方法是什么?

1 个答案:

答案 0 :(得分:1)

对于旧版浏览器,执行需要设置输入的onkeyup和onchange以及onpaste。

但是较新的浏览器具有oninput,这是您希望每个浏览器都拥有的。

您可以设置所有事件,然后在oninput触发时删除除输入之外的所有事件。

(但是如果您正在退格或删除字符,IE9在传递输入事件方面存在问题,因此请仅为该浏览器保留键事件。)

示例代码 - 将所有事件定向到一个处理程序,如果oninput触发则删除

F.text1.oninput= function(){
    F.text1.onpaste= F.text1.onchange= null;
    if(!document.documentMode) F.text1.onkeyup= null;
    F.text1.oninput= F.limiter;
    return F.limiter();
}
F.text1.onpaste= function(){
    setTimeout(F.limiter, 100);
}
F.text1.onkeyup= F.text1.onchange= F.limiter;