neb*_*ebs 17 jquery events click propagation
在我的页面上,我有很多响应点击事件的元素.有时我需要根据某些全局标志来阻止所有点击.有没有办法在集中的位置进行检查?
现在我在每个事件中检查标志,例如:
var canClick = false; // Global flag
// Sample click event:
$("#someDiv").click(function(){
if(!canClick) return;
// Some stuff ...
});
Run Code Online (Sandbox Code Playgroud)
我想做的是有一个元素在任何其他元素之前捕获所有点击事件.
我尝试在文档上执行此操作但这些事件仅在其他单击事件之后发生.
例:
$("#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
Run Code Online (Sandbox Code Playgroud)
我还尝试在所有内容之上放置一个全屏div并使用它来捕获事件,但问题是没有任何点击通过这个全屏div传播.此外,我不想依赖于创建额外的元素来捕获点击,因为它感觉有点hacky.
我可以覆盖jQuery点击功能,以便我可以把我的小支票放在那里吗?
有什么明显的东西我在这里不见了吗?
谢谢你的帮助.
Joh*_*ler 24
是的,使用.addEventListener()并将第3个选项设置为true.这会将侦听器绑定到捕获阶段,并在执行任何其他操作之前执行该函数.
这是一个示例,它将阻止所有点击处理程序执行:
document.addEventListener('click', function(e) {
e.stopPropagation();
}, true);
Run Code Online (Sandbox Code Playgroud)
在这里看到它: