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

时间:2012-03-13 08:25:54

标签: javascript jquery google-chrome focus

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

情景:

  1. 清除控制台
  2. 专注于元素(2或3个控制台消息)
  3. 专注于其他相同的元素或无焦点,并再次关注 同一个(没问题)
  4. 清除控制台
  5. 专注于元素(2或3个控制台消息 - 问题又回来了!)
  6. 我已经创建了一个jsfiddle,请查看: http://jsfiddle.net/ffuWT/3/

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

2 个答案:

答案 0 :(得分:6)

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

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

在“Window + focusable element”下查看http://www.quirksmode.org/dom/events/blurfocus.html

  

如果在聚焦可聚焦元素时向后发送窗口,   模糊事件应该同时触发。如果窗口被提前   再次,焦点事件应该同时触发。

接下来,在兼容性表中注意到

  

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

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

答案 1 :(得分:3)

我能够重新创建问题(使用你的jsFiddle),而且从我所看到的情况来看,只有当你点击select而没有关注结果框架中的/时才会发生这种情况。

在框架内点击但不在select上点击,然后点击展开其中一个select,你只会看到一行记录。

您还可以将/show附加到jsFiddle网址以查看result in a separate window

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

Open this demo并关闭浏览器窗口(通过单击桌面,任务栏或其他窗口),然后单击其中一个select以展开其option并查看控制台

使用Chrome 17.0.963.79 m。