8

我遇到了特定于 IE8 的问题。此事件不会单独在 IE8 中触发,但在 IE9 和其他浏览器(如 Firefox 和 Chrome)中运行良好。

$('#myId').on('input', function () {
   //do something.
}

请让我知道在 IE8 中是否有任何解决方法。

谢谢!

4

6 回答 6

27

旧版本的 IE 有一个propertychange您可以使用的事件。您可以同时检查propertychange事件和input事件:

$('#myId').on("propertychange input",function(ev){
    doAwesomeThing();
});
于 2014-10-14T14:58:38.990 回答
8

oninput 是 IE9+,这就是为什么它在 IE8 中不起作用

MDNoninput

Feature         Chrome    Firefox    Internet Explorer    Opera    Safari
Basic support   (Yes)     2          9                    10       (Yes)
于 2013-10-03T13:50:34.667 回答
5

AaronBaker 的回答:适用于 IE8 和 IE10(html5) 以及现代浏览器......没有双重事件发布

我会使用评论或投票,但代表太低了。

$('#myId').on("propertychange input",function(ev){
    doAwesomeThing();
});
于 2015-01-19T21:19:26.937 回答
1

看起来该input事件是 HTML5 规范的一部分,我不希望 IE8 能够处理。您可能需要改用该change事件。

于 2013-10-03T13:51:36.960 回答
1

这种轻微的优化将防止侦听器在现代浏览器中触发两次(有点骇人听闻,但可能是最好的解决方案)

$('selector').on(!window.eventListener ? 'keyup' : 'input', function () {}

于 2015-04-22T21:22:35.297 回答
0

我尝试propertychange按照最佳答案的建议使用,但我注意到有时它不会在 IE8 中触发。例如,如果我只删除一个字符,则在使用预填充输入刷新页面后。

我的解决方案是使用keyup cut paste事件而不是propertychange

$('#myId').on('input keyup cut paste', function(e) {
    setTimeout(function() {
        doAwesomeThing();
    }, 0);
});

我使用setTimeout了 0 延迟,否则我会在cutpaste事件上获得旧的输入值,有关详细信息,请参阅https://stackoverflow.com/a/9364812/2324685

您应该注意,此代码在某些情况下可能会触发两次。

于 2018-10-04T17:04:02.057 回答