Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择页面上的所有元素,但选择id为的元素中的所有元素_Javascript_Jquery - Fatal编程技术网

Javascript 选择页面上的所有元素,但选择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

我试图将单击事件绑定到页面上的所有元素,除了id为的元素内的元素

    $('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();”停止传播在对话框窗体上,所以里面的元素仍然会被激发!