在'on'事件中多个':not()'

时间:2013-04-10 08:49:16

标签: jquery

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

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

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

似乎都没有用。什么是正确的语法?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

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

使用这样的代码,您可以看到click事件传播的元素:

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

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