0

在我的文档on('click')事件中,我希望单击处理程序附加到文档中的所有内容,除了动态插入的 div('#controlElement')及其所有子项。我努力了

$(document).on("click", "*:not(#controlElement):not(#controlElement *)", function(e) {}

$(document).on("click", "*:not(#controlElement, #controlElement *)", function(e) {}

两者似乎都不起作用。什么是正确的语法?

4

2 回答 2

1

正如@drquicksilver 正确指出的那样,您所看到的是事件在 DOM 树上的传播。如果您想在单击您的 taget 元素时停止此行为并且不传播,您需要稍微反转您的处理程序以调用Event.stopPropagation

$(document).on("click", "*", 
           function(e) { 
               if($(this).is(':not(#controlElement):not(#controlElement *)')){
                   alert('clicked, on '+this.tagName); 
               }
               else{
                   e.stopPropagation();
               }
           });

现场示例:http: //jsfiddle.net/6Zrg6/1/

于 2013-04-10T09:05:32.950 回答
0

它确实有效,但也许你误解了你所看到的?

您确实不会在#controlElement 或其任何子项上获得点击事件,但您仍然会在其父项上获得点击事件,一直到 BODY 和 HTML。

使用类似这样的代码,您可以看到点击事件通过哪些元素传播:

$(document).on("click", "*:not(#controlElement):not(#controlElement *)", 
    function(e) { alert('clicked, on '+this.tagName); });

我在小提琴中做了一个简单的例子:http: //jsfiddle.net/6Zrg6/

于 2013-04-10T08:56:20.717 回答