以下代码取消整个页面的左键单击和中键单击:
<script> $(document).on('click',false) </script>
<a href="http://example.com">link</a>
此代码使用 jquery 委托(delegate)事件仅取消对 A
元素的点击:
<script> $(document).on('click','a',false) </script>
<a href="http://example.com">link</a>
左键单击效果很好,但如果您中键单击链接,则会打开一个新选项卡,这意味着事件未取消。
为什么使用第二个代码,中键点击没有被取消?
最佳答案
jQuery 明确禁止对委托(delegate)事件进行非左键单击,如源代码第 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 })
关于javascript - jQuery 的委托(delegate)事件无法取消中键点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34537484/