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

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

> onchange仅在您离开输入框时触发(即标签离开或点击外部).
> onkeypress在更改之前触发,并且在任何按键时触发(例如,左侧和右侧光标也不会导致任何文本更改)
> onkeydown和onkeyup也会触发任何键(甚至像Shift等,它们不会导致任何文本更改)

而且,当用鼠标右键单击从剪贴板粘贴时,这些似乎都不会触发.或者在JS中更改值时(即从其他地方执行input.value = something).

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

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

解决方法:

对于旧版浏览器,您需要设置输入的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;
上一篇:Java.util.Map的常用实现类有哪些?


下一篇:关于更改的javascript需要刷新