我遇到了特定于 IE8 的问题。此事件不会单独在 IE8 中触发,但在 IE9 和其他浏览器(如 Firefox 和 Chrome)中运行良好。
$('#myId').on('input', function () {
//do something.
}
请让我知道在 IE8 中是否有任何解决方法。
谢谢!
我遇到了特定于 IE8 的问题。此事件不会单独在 IE8 中触发,但在 IE9 和其他浏览器(如 Firefox 和 Chrome)中运行良好。
$('#myId').on('input', function () {
//do something.
}
请让我知道在 IE8 中是否有任何解决方法。
谢谢!
旧版本的 IE 有一个propertychange
您可以使用的事件。您可以同时检查propertychange
事件和input
事件:
$('#myId').on("propertychange input",function(ev){
doAwesomeThing();
});
oninput 是 IE9+,这就是为什么它在 IE8 中不起作用
Feature Chrome Firefox Internet Explorer Opera Safari
Basic support (Yes) 2 9 10 (Yes)
AaronBaker 的回答:适用于 IE8 和 IE10(html5) 以及现代浏览器......没有双重事件发布
我会使用评论或投票,但代表太低了。
$('#myId').on("propertychange input",function(ev){
doAwesomeThing();
});
看起来该input
事件是 HTML5 规范的一部分,我不希望 IE8 能够处理。您可能需要改用该change
事件。
这种轻微的优化将防止侦听器在现代浏览器中触发两次(有点骇人听闻,但可能是最好的解决方案)
$('selector').on(!window.eventListener ? 'keyup' : 'input', function () {}
我尝试propertychange
按照最佳答案的建议使用,但我注意到有时它不会在 IE8 中触发。例如,如果我只删除一个字符,则在使用预填充输入刷新页面后。
我的解决方案是使用keyup cut paste
事件而不是propertychange
:
$('#myId').on('input keyup cut paste', function(e) {
setTimeout(function() {
doAwesomeThing();
}, 0);
});
我使用setTimeout
了 0 延迟,否则我会在cut
和paste
事件上获得旧的输入值,有关详细信息,请参阅https://stackoverflow.com/a/9364812/2324685。
您应该注意,此代码在某些情况下可能会触发两次。