如何解决jQuery:捕获所有单击事件,然后再发生?
| 在我的页面上,我有很多可以响应点击事件的元素。 有时候,我需要根据某个全局标记来阻止所有点击。 有什么方法可以在集中位置进行此检查? 现在,在每个事件中,我都会检查标志,例如:var canClick = false; // Global flag
// Sample click event:
$(\"#someDiv\").click(function(){
if(!canClick) return;
// Some stuff ...
});
我想做的是拥有一个在所有其他元素之前捕获所有点击事件的元素。
我尝试对文档进行处理,但是这些事件仅在其他单击事件之后发生。
例:
$(\"#someDiv\").click(function(){ console.log(\"someDiv click\"); });
$(document).click(function(){ console.log(\"Document click\"); });
// When I click on the someDiv element it prints:
> someDiv click
> Document click
我还尝试将全屏div放在所有内容之上,并使用它来捕获事件,但问题是没有任何点击通过该全屏div传播。另外,我不想依赖于创建额外的元素来捕获点击,因为它感觉有些怪异。
我可以覆盖jQuery click函数,以便将小支票放进去吗?
有什么明显的我想念的地方吗?
谢谢你的帮助。
解决方法
是的,使用.addEventListener()并将第3个选项设置为true。这会将侦听器绑定到捕获阶段,并在执行其他任何操作之前执行该函数。
这是一个示例,该示例将阻止所有点击处理程序执行:
document.addEventListener(\'click\',function(e) {
e.stopPropagation();
},true);
在这里查看实际操作:
http://jsfiddle.net/wLwMh/1/
, 您可以捕获所有单击事件,然后触发自定义事件,在此事件中您的听众在检查后被绑定
$(\"#someDiv\").bind(\'awesomeEvent\',function() {
//do stuff here
}
$(*).click(function() {
if(canClick) {
$(this).trigger(\'awesomeEvent\');
}
}
编辑
我应该提到,从性能的角度来看,使用$(*)选择器不是一个好主意。您应该真正尝试以某种方式缩小范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。