谷歌浏览器重复JavaScript'焦点'事件

non*_*ame 5 javascript jquery google-chrome focus

我注意到Chrome处理javascript焦点事件的一个奇怪问题.事实是,即使它只发生一次,它也会持续触发焦点事件.我在这里做了一些研究,发现了使用alert()时人们遇到同样问题的问题.当他们关闭警报窗口时,焦点返回到他们的输入并且处理程序一次又一次地触发.在我的情况下,问题是不同的,因为我使用console.log(),并不时得到相同的日志2甚至3次.我注意到它通常发生在清除控制台时,然后专注于一个元素.当我尝试重复它时,它不再发生.

场景:

  1. 清除控制台
  2. 专注于元素(2或3个控制台消息)
  3. 专注于其他相同的元素或不重点,并再次集中在同一个元素上(没有问题)
  4. 清除控制台
  5. 专注于元素(2或3个控制台消息 - 问题又回来了!)

我已经创建了一个jsfiddle,请查看:http: //jsfiddle.net/ffuWT/3/

问题是,这个问题的原因是什么,我该如何解决它?

o.v*_*.v. 6

令人毛骨悚然的事情如何发生.我今天在工作中遇到了这个确切的问题,但很快就在第三方插件(jQuery customInput)中发现了怀疑狡猾的事件监听和传播.我明天会仔细检查你的jsfiddle.

我无法在我当前可用的设置(Mac上的Chrome v17)上重新创建您的确切输出,但我确实有一个理论可以分享.在你的场景和Ben Lee的评论中,一致的部分正在将焦点转移到另一个窗口(在你的情况下是控制台).

查看"Window + focusable element"下的http://www.quirksmode.org/dom/events/blurfocus.html:

如果在聚焦可聚焦元素的同时向后发送窗口,则应同时触发模糊事件.如果窗口再次向前移动,焦点事件应同时触发.

接下来,在兼容性表中注意到了这一点

Safari Windows会触发两个焦点事件.

也许Chrome终于得到了这个"功能",来自Webkit家族和所有人?


Ste*_*fan 3

我能够重新创建问题(使用您的 jsFiddle),并且从我所看到的情况来看,只有当您单击select而不将焦点放在结果框架中时才会发生。

\n\n

select在单击展开其中一个 s 之前,请在框架内单击,但不要单击selects,并且您\xc2\xb4ll 只会看到记录的一行。

\n\n

您还可以附加/show到 jsFiddle URL 以在单独的窗口中查看结果

\n\n

似乎通过单击select控件来聚焦窗口会多次触发该事件。

\n\n

打开此演示并取消浏览器窗口的焦点(通过单击桌面、任务栏或其他窗口),然后单击其中一个select来展开其option并查看控制台。

\n\n

使用 Chrome 17.0.963.79 m。

\n