2011-06-19 144 views
6

点击谷歌浏览器中的链接时,焦点事件无法触发。所有其他浏览器都会触发焦点事件以获取链接。谷歌浏览器Javascript链接错误

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

我不想附加事件onmousedown,但onfocus。

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

编辑:

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

即使不具备对焦元素,tabindex触发器也会专注于点击谷歌浏览器。

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

我不能连接到两个clickfocus因为那时的onclick,其他浏览器会调用该函数的两倍。我无法检测到此功能,因为它需要用户 进行交互,并且我不会执行用户代理字符串检测,因为它的错误。

使用这个网站:

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

是他们没有办法无效第二onmousedown呼叫阻止功能在非谷歌浏览器中被调用两次。

编辑2:

经过进一步测试<input type=radio>也没有打电话焦点谷歌浏览器。 为什么在这个世界上是这样的谷歌浏览器,而Opera,IE和Firefox都没关系。什么是疯狂的是,当我在我的Android设备上尝试它时,移动webkit浏览器甚至触发了关注链接。

+0

http://jsfiddle.net/82QXv/ –

+0

事实上,不能正常工作。另外,当我使用Tab键关注链接时,焦点事件会重复触发。这看起来坏了。 Chrome 12.0.742.100 –

+0

用'tab'键检查:http://jsfiddle.net/82QXv/1/ –

回答

1

一个解决,你可以做,以避免从弹出的工作浏览器的双focus事件,而仍然得到focus事件流行的浏览器,是一个点击事件检查页面上是否有focus,如果没有,则触发focus事件。

使用jQuery这是可以做到这样的:

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

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

+1

有趣的是,'document.activeElement'在触发'onmousedown'时引用document.body,或者'onclick',因为对于谷歌浏览器来说,元素实际上从未获得焦点。 http://jsfiddle.net/qmcUt/36/此外,我将点击切换到'mousedown',以便在大多数浏览器触发'focus'时触发。 – William

3

这实际上工作得很好,除非焦点事件不是简单地通过点击链接触发(尝试标签,你会看到事件触发)。我不认为这是一个错误,为什么不只是安全防范和使用两个?

+1

+1。 Webkit不会触发事件,除非用户使用键盘。 – Triptych

+0

@Triptych - 我只是想知道,为什么? W3C似乎说可以用“指点设备”来激发焦点:http://www.w3.org/TR/html4/interact/scripts.html#adef-onfocus –

+0

我编辑了我的帖子,进一步解释了这个问题,以及为什么它应该作为错误提交。 – William

0

你可以用小黑客:

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