我在做什么
在代码的某些部分,我有一个关于focusin事件的监听器,而另一部分以编程方式将焦点设置在输入上.在Chrome,Safari,Firefox上,事件监听器被调用一次,但在IE(包括IE10)上,它被调用两次.我使用jQuery的.on()
注册了监听器,并使用jQuery的.focus()
设置了焦点.请参阅下面的显示此行为的示例的完整源代码,如果您愿意,可以使用run that example.
问题
>即使不使用jQuery,IE也会激活焦点两次.并且只有在以编程方式设置焦点时才会这样做,而不是在用户选项卡或单击字段时.为什么?它只是一个IE漏洞,还是IE有这么好的理由?
>无论是否是IE错误,jQuery不应该在这里解决IE和其他浏览器之间的区别吗?换句话说,是不是这样一个jQuery bug?
>你会如何解决这个问题? (即所以我可以拥有每个焦点只运行一次的代码,无论是以编程方式还是由用户设置焦点.)
完整来源
Unfortunately,all versions of Internet Explorer (6 through 10) fire
focus events asynchronously. When you .trigger(“focus”) in IE,jQuery
won’t “see” the async focus event which will occur later,so it fires
one of its own to ensure that a focus event always occurs as described
above. This causes two calls to the event handler. To avoid this
double-call–but risk that the event handler is not called at all–use
the DOM focus method directly,e.g.,$(“selector”).get(0).focus().
我使用了$(‘input’).get(0).focus(),并且它在加载页面时不是很一致.如果我将代码移动到一个按钮,那么我一直在关注焦点事件.