jQuery的委托事件无法取消中间点击

时间:2015-12-30 21:25:38

标签: javascript jquery html dom-events event-propagation

以下代码取消了整个页面上的左键点击和中间点击:

<script> $(document).on('click',false) </script>
<a href="http://example.com">link</a>

此其他代码使用jquery委托事件取消A元素的点击次数:

<script> $(document).on('click','a',false) </script>
<a href="http://example.com">link</a>

适用于左键单击,但如果您在中间单击该链接,则会打开一个新选项卡,这意味着该事件未被取消。

为什么使用第二个代码,中间点击不会被取消?

1 个答案:

答案 0 :(得分:0)

jQuery明确禁止对委托事件进行非左键单击,如源代码第357行所示: https://github.com/jquery/jquery/blob/1de834672959636da8c06263c3530226b17a84c3/src/event.js#L357

原因:
Firefox不支持中键点击事件,所以他们决定不允许所有浏览器使用该功能。

作为一个工作方式,表达

$(document).on('click','a',false)

可以转换为功能等效的

$(document).click(function(evt){ if($(evt.target).closest('a').length) return false })