每当输入控件中的文本发生变化时,我都需要立即更新一些内容。但我似乎无法为此找到正确的事件。
onchange仅在您离开输入框时触发(即标签离开或点击外部)。
onkeypress在进行更改之前触发,并在任何键按下时触发(例如,光标左侧和右侧不会导致任何文本改变)
此外,当用鼠标右键单击+从剪贴板粘贴时,这些似乎都不会触发。或者在JS中更改值时(即,输入input.value =来自其他地方的东西)。
最小例子:http://jsfiddle.net/nggAm/
我该怎么办?我想我可能解决这个问题的方法(好吧,大多数情况下)是将ALL事件设置为一个通用事件处理程序,在那里缓存值,并且仅在更改字符串时执行实际更新。但这感觉有点糟糕。 正确这样做的方法是什么?
答案 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;