Javascript 选择页面上的所有元素,但选择id为的元素中的所有元素
我试图将单击事件绑定到页面上的所有元素,除了id为的元素内的元素Javascript 选择页面上的所有元素,但选择id为的元素中的所有元素,javascript,jquery,Javascript,Jquery,我试图将单击事件绑定到页面上的所有元素,除了id为的元素内的元素 $('body :not(#dialog-form *)').off('click').on('click', function (e) { //code }); 上述代码将click事件绑定到“dialog form”中的那些元素 您的代码正在运行,但您不了解发生了什么。您可以看到,您绑定了除某些元素之外的所有内容的单击,但是#dialog form*在主体中,这意味着即使#dialog fo
$('body :not(#dialog-form *)').off('click').on('click', function (e)
{
//code
});
上述代码将click事件绑定到“dialog form”中的那些元素 您的代码正在运行,但您不了解发生了什么。您可以看到,您绑定了除某些元素之外的所有内容的单击,但是
#dialog form*
在主体
中,这意味着即使#dialog form*
没有事件,单击它也会导致单击主体
(包含事件)。您需要防止冒泡:
$('body').off('click').on('click', function (e){
//code
});
$('#dialog-form').on('click', function(e){
e.stopPropagation();
})
Fiddle:您可以使用
.on
绑定到高级元素(可能是body
),而不是绑定到所有元素,并忽略指定元素上发生的事件。按照@MikeW的建议执行。将事件绑定到每个元素是一个巨大的性能损失。如果向不希望事件绑定到的元素添加类名,则更简单。然后您可以这样做:$('body')。在('click',':not(.class name')上,函数(){/*dostuff*/})代码>。明白了!但是我希望“对话表单”中元素的事件处理程序触发它们的事件!我不明白为什么这会阻止他们因为“e.stopPropagation();”停止传播在对话框窗体上,所以里面的元素仍然会被激发!