2
今天我偶然发现了一个奇怪的Internet Explorer怪癖。我调用元素的焦点函数,然后绑定事件侦听器。在所有浏览器中,它都按时间顺序执行,但在IE中却没有。addEventListener触发焦点之前的Internet Explorer焦点?
我有这样一段代码:
var t = document.getElementById('focusable');
t.focus();
t.addEventListener('focus', function() {
alert('This should only happen after the second focus.');
});
<input id="focusable">
我的问题是:
为什么会出现这种情况?,我怎样才能解决它没有setTimeout(fn,0);
黑客。
注:我使用IE11
谢谢您的答复。我只是测试了setTimeout“解决方案”的一致性,但偶尔会失败。我把setEventListener放在settimeout里面。 – A1rPun 2014-11-03 09:06:17
谢谢T.J.我也讨厌它,但至少这是一致的;) – A1rPun 2014-11-03 09:20:22
@ A1rPun:不用担心。公平的警告:上述工作适用于IE11和Chrome,但Firefox拒绝给予重点关注。它执行't.focus();'行,但没有给出字段焦点 - 即使我只将该位放在'setTimeout'中。 V.怪异的,我知道我已经把焦点集中在Firefox的领域之前...... – 2014-11-03 09:22:31