4

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

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

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

  • onkeydown 和 onkeyup 也会在任何键上触发(甚至像 Shift 等,这不会导致任何文本更改)

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

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

我应该怎么办?我想我可以解决这个问题的一种方法(嗯,主要是)是将所有事件设置为一个通用事件处理程序,在那里缓存值,并且只在字符串更改时才进行实际更新。但这感觉有点糟糕。这样做的正确方法是什么?

4

1 回答 1

1

对于较旧的浏览器,您确实需要设置输入的 onkeyup 和 onchange 和 onpaste。

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

您可以设置所有事件,然后在 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;
于 2012-04-25T07:24:43.147 回答