【问题标题】:jQuery's delegated events can't cancel middle clicksjQuery委托事件不能取消中间点击
【发布时间】:2015-12-30 21:25:37
【问题描述】:

以下代码取消整个页面的左键和中键:

<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>

左键点击效果很好,但是如果你中键点击链接,会打开一个新标签,这意味着事件没有被取消。

为什么使用第二个代码,中间点击没有取消?

【问题讨论】:

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


【解决方案1】:

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 })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多