如何检测页面上的任何点击?

4

我希望能够捕获页面上任何元素的点击事件。但是我无法捕获特定页面元素的点击事件。请参见示例https://jsfiddle.net/rdnf5m1f/

 $(function() {
        $(".profile").on( "click","a", function() {
            console.log(1);
          return false;
        });

        // below not work
        $("body").on( "click","*", function() {
            console.log(2);
        });

        $("body").click(function() {
            console.log(2);
        });

        $(window).click(function() {
            console.log(2);
        });
 });

为什么?

1
尝试将该代码包装在 $(function(){ // your code }); 中。 - area28
不要嘲笑我,只是试一下。 - Dmitriy Kupriyanov
5个回答

3

"捕获所有,排除一些"是指根据需要进行筛选。将不想要被捕获的元素添加一个名为'nocapture'的类,并使用以下脚本:

jQuery('*:not(.nocapture)').on('click', function(e){
    e.stopPropagation();
    console.log('Element clicked', this); 
})

这是我几天前写的答案的副本。 - Diego ZoracKy
这可能会向页面添加数千个事件监听器。 - Teemu
许多事件监听器会有问题吗?为什么?我尝试了 jQuery('*'),乍一看似乎运行良好。 - Dmitriy Kupriyanov

2
当您从jQuery函数中返回false时,它会执行stopPropagation,这将防止其他处理程序执行。在这种情况下,我认为您正在寻找以下代码。
$(document).on('click', function() {
  console.log(2);
});

1

将您的代码包装在某种准备就绪的处理程序中,例如 document

$(function() {
    $("body").click(function() {
        console.log(2);
    });
});

查看这个


1
你可以使用e.target属性来排除特定的元素类型或类。
var tagsToExclude = 'a,div';
$(document).click(function(e) {   
   if(tagsToExclude.indexOf(e.target.nodeName.toLowerCase()) == -1)
       alert('Clicked');
     e.preventDefault();
});

示例:https://jsfiddle.net/DinoMyte/rdnf5m1f/4/


0

HTML

<body>
    <div class="profile">
    <a href="">Bla bla bla</a>
    </div>
</body>

jQuery

$(window).on( "click", function() {

  alert("click");

});

代码片段


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接