jQuery:在所有点击事件发生之前陷阱? [英] jQuery: Trap all click events before they happen?

查看:143
本文介绍了jQuery:在所有点击事件发生之前陷阱?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的页面上,我有很多不同的元素来响应点击事件。
有时我需要根据一些全局标志来阻止所有的点击。
有没有办法我可以在集中的位置进行这种检查?

On my page I have a lot of various elements which respond to click events. There are times when I need to block all clicks based on some global flag. Is there a way I can make this check in a centralized location?

现在在每个事件我检查标志,例如:

Right now in each event I check for the flag, for example:

var canClick = false; // Global flag

// Sample click event:
$("#someDiv").click(function(){
  if(!canClick) return;

  // Some stuff ...
});

我想做的是有一个元素将所有点击事件 / em>任何其他元素。

What I'd like to do is have one element which traps all click events before any other elements.

我尝试在文档上执行,但这些事件只发生在其他点击事件之后。

I tried doing it on document but these events only occur after the other click events.

示例:

$("#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传播的。另外,我不想依赖创建额外的元素来捕获点击,因为它感觉有点黑客。

I also tried putting a full screen div on top of everything and using this to trap events but the problem there was that none of the clicks were being propagated through this full screen div. Also I don't want to rely on creating extra elements to trap clicks as it feels a little hacky.

我可以覆盖jQuery点击功能,以便我可以我的小支票在那里?

Could I maybe overwrite the jQuery click function so that I can put my little check in there?

有没有什么明显的我在这里缺少?

Is there something obvious I'm missing here?

感谢任何帮助

推荐答案

是的,使用.addEventListener()并将第3个选项设置为 true 。这将使监听器绑定到捕获阶段,并在执行任何其他操作之前执行该功能。

Yes, use .addEventListener() and set the 3rd option to true. This will bind the listener to the capture phase and execute the function before anything else gets executed.

以下是一个示例,其中将停止所有点击处理程序执行:

Here's an example where this will stop all click handlers from executing:

document.addEventListener('click', function(e) {
    e.stopPropagation();
}, true);

在此处查看:

http://jsfiddle.net/wLwMh/1/

这篇关于jQuery:在所有点击事件发生之前陷阱?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆