鼠标的onClick事件是通用的吗?

3
我注意到Google在其搜索结果中使用onMouseDown来进行网络跟踪,查看关键字和排名等信息。
我想知道哪个更好,是onClick还是onMouseDown - 或者它们都支持以下所有内容:中间按钮,左键单击,右键单击(其他按钮,如游戏鼠标)。它们在所有浏览器中都得到支持,包括移动电话,平板电脑和所有其他操作系统吗?最重要的是函数首先加载。如果javascript失败,HREF用于SEO和其他UI / UX优势。
<a href="http://www.site.com" onclick="doMyFunctionFirst();">
JavaScript loaded before the href URL
</a>

或者

<a href="http://www.site.com" onMousedown="doMyFunctionFirst();">
JavaScript loaded before the href URL
</a>

或者看似显而易见的(我不会这样做,因为每个字符对于我的客户来说都很重要)

<a href="http://www.site.com" onclick="doMyFunctionFirst();" onMouseDown="doMyFunctionFirst();">
JavaScript loaded before the href URL
</a>

2
使用 onmousedown 而不是 onclick 的一个原因是前者响应速度更快,可以明显感觉到(大约0.4秒)。 - dfsq
@dfsq 是的,但我怀疑大多数人的上下时间差远不到0.4秒。此外,当您将鼠标放下但随后在页面其他地方释放时,它也会产生错误的触发。 - Domenic
1
在我的Phonegap+jQuery Mobile应用程序中,切换到mousedown非常明显。因此,我想这取决于代码的重量、硬件等因素。 - dfsq
1
http://www.tricedesigns.com/2012/01/17/mobile-web-phonegap-html-dev-tips/ - dfsq
@dfsq 很好,手机端的情况似乎不同。谢谢你教我东西!(虽然链接似乎建议使用触摸事件而不是鼠标事件作为解决方案。) - Domenic
显示剩余3条评论
3个回答

4
值得注意的是,如果你通过按Enter键来跳转到链接,则会触发click事件,但不会触发mousedown/mouseup事件。

看起来很奇怪,因为你会期望人们在链接之间切换,然后按下他们想要访问的链接 - 除非谷歌只是用它来跟踪链接。 - TheBlackBenzKid

1
主要的区别在于,虽然 onmousedown 会触发无论按下哪个鼠标按钮,但是 onclick 只会触发左键点击事件 - 这很可能是你想要的。

所以即使我按下右键,onmousedown也会运行该函数。 - TheBlackBenzKid

-1

在 W3C 规范中似乎没有说明这些事件是否应该对所有按钮触发,只是表示事件对象的 "button" 属性应该指示所按下的按钮。至少在 Chrome 中,“click” 似乎只针对主要(在我的情况下是左侧)鼠标按钮触发。Quirksmode 提供了一个有用的测试工具 来检查这一点。

onclick、onmousedown 和 onmouseup 表示不同的行为,其中没有一个本质上“更好”: “click” 是按下和释放按钮,mousedown 是“按下” 和 mouseup 是“释放”。通常这会在执行一些拖放操作时变得相关。

MDN 文档 指出 onclick 在 mousedown 和 mouseup 之后触发。

此外,理想情况下,您应该使用非侵入式JavaScript技术来附加事件处理程序,而不是在标记中进行。

HREF用于SEO和其他UI / UX效益,以防JavaScript失败。

如果事件处理程序正在执行重定向/ AJAX请求或类似操作,则应使用preventDefault方法,如果您不希望浏览器在触发事件后跟随链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接