在我的文档on('click')
事件中,我希望点击处理程序附加到文档中的所有内容,但动态插入的div ('#controlElement')
及其所有子项除外。我试过了
$(document).on("click", "*:not(#controlElement):not(#controlElement *)", function(e) {}
和
$(document).on("click", "*:not(#controlElement, #controlElement *)", function(e) {}
似乎都没有用。什么是正确的语法?
答案 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();
}
});
答案 1 :(得分:0)
它确实有用,但也许你误解了你所看到的东西?
您确实不会在#controlElement或其任何子节点上获得点击事件,但您仍会在其父节点上获得点击事件,直至BODY和HTML。
使用这样的代码,您可以看到click事件传播的元素:
$(document).on("click", "*:not(#controlElement):not(#controlElement *)",
function(e) { alert('clicked, on '+this.tagName); });
我在小提琴中做了一个简单的例子:http://jsfiddle.net/6Zrg6/