谷歌浏览器Javascript链接错误

Google Chrome Javascript Link Bug

本文关键字:错误 链接 Javascript 谷歌浏览器      更新时间:2023-09-26

在谷歌chrome中单击链接时,焦点事件无法触发。所有其他浏览器都会触发链接的焦点事件。

<a href=# onfocus="console.log('focus')">Link</a>

我不想将事件附加到mousedown上,而是附加到onfocus上。

任何人都有解决办法的想法。

编辑:

我肯定会认为这是一个错误,因为所有其他可聚焦元素都会在点击时触发聚焦。

即使是tabindex触发器的不可聚焦元素也会在谷歌chrome中点击。

<div tabindex="-1" onfocus="console.log('focus')">div</div>

我不能同时连接到clickfocus,因为一旦单击,其他浏览器就会调用该函数两次。我无法检测此功能,因为它需要用户交互,我不会做用户代理字符串检测,因为这是错误的。

使用此html:

<a href=# onfocus="console.log('focus')" onmousedown="console.log('mousedown')">Link</a>

他们有没有办法使第二个onmousedown调用无效,以防止函数在非谷歌浏览器中被调用两次。

编辑2:

经过进一步测试,<input type=radio>也未能在谷歌chrome中调用焦点。为什么谷歌chrome是这样的,而Opera、IE和firefox都可以。疯狂的是,当我在Android设备上尝试时,移动webkit浏览器甚至会触发对链接的关注。

这实际上运行得很好,只是焦点事件不是简单地通过点击链接来触发的(尝试选项卡,您会看到事件触发)。我不认为这是一个错误,为什么不安全地保护和使用两者呢?

为了避免双focus事件在工作浏览器上弹出,同时仍然让focus事件在Chrome上弹出,您可以做的一项工作是在点击事件上检查页面上是否有focus,如果没有,则触发focus事件。

使用jQuery可以这样做:

$('a').click(function(e){
     if(!$('*:focus').length) $(this).trigger('focus');         
});

示例:http://jsfiddle.net/niklasvh/qmcUt/

您可以使用小型破解:

<a href="#" onfocus="console.log('focus')" onclick="this.focus()">Link</a>