jquery .on(’input’)不会单独在ie8中被触发

我有这个特定于IE8的问题。 此事件不仅仅在IE8中触发,而且在IE9和Firefox和Chrome等其他浏览器中运行良好。

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

如果在IE8中有相同的解决方法,请告诉我。

谢谢!

oninput是IE9 +,这就是它在IE8中不起作用的原因

MDN oninput

 Feature Chrome Firefox Internet Explorer Opera Safari Basic support (Yes) 2 9 10 (Yes) 

较早版本的IE有一个名为propertychange的事件,您可以使用它。 您可以同时检查propertychange事件和input事件:

 $('#myId').on("propertychange input",function(ev){ doAwesomeThing(); }); 

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

我会使用评论或upvote,但代表太低。

 $('#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延迟,否则我会在cutpaste事件上获得旧的输入值,详情请参阅https://stackoverflow.com/a/9364812/2324685 。

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