Javascript 如果单击主体,则切换事件处理程序,但如果单击的是[某个元素],则不切换事件处理程序

Javascript 如果单击主体,则切换事件处理程序,但如果单击的是[某个元素],则不切换事件处理程序,javascript,jquery,html,javascript-events,Javascript,Jquery,Html,Javascript Events,我想制作一个事件监听器,在单击某个元素时触发一些代码,如果单击该元素以外的任何元素,则可以切换一些代码。到目前为止,我想到的只是制作两个处理程序,一个用于主体,一个用于元素,并使用setTimeout()稍微延迟代码,以避免两个处理程序冲突。它看起来很难看,嗯,不对。有没有更好的方法来满足我的需要?或者,是否有“除此元素外的所有元素”处理程序可以使用?我一直在使用JQuery来实现这一点,因此欢迎并首选依赖于库的答案。如果您想将单击绑定到所有元素,而不是绑定到id为“div1”的元素,可以使用如

我想制作一个事件监听器,在单击某个元素时触发一些代码,如果单击该元素以外的任何元素,则可以切换一些代码。到目前为止,我想到的只是制作两个处理程序,一个用于主体,一个用于元素,并使用
setTimeout()
稍微延迟代码,以避免两个处理程序冲突。它看起来很难看,嗯,不对。有没有更好的方法来满足我的需要?或者,是否有“除此元素外的所有元素”处理程序可以使用?我一直在使用JQuery来实现这一点,因此欢迎并首选依赖于库的答案。

如果您想将单击绑定到所有元素,而不是绑定到id为“div1”的元素,可以使用如下方法:

$('body').on('click', ':not(#div1)', function(){ 

});

如果要将单击绑定到所有元素,而不是绑定到id为“div1”的元素,可以使用以下命令:

$('body').on('click', ':not(#div1)', function(){ 

});

也许你想要这样的东西(如果我理解这个问题的话)

HTML:

<button id="btn">Click</button>
$('body').on('click', function(e){
    if(e.target.nodeName=='BODY') 
    {
        // clickd on body
    }
    else if($(e.target).attr('id')=='btn')
    {
        // clickd on button
    }
});

.

也许你想要这样的东西(如果我理解这个问题的话)

HTML:

<button id="btn">Click</button>
$('body').on('click', function(e){
    if(e.target.nodeName=='BODY') 
    {
        // clickd on body
    }
    else if($(e.target).attr('id')=='btn')
    {
        // clickd on button
    }
});

.

我很困惑,不明白这个问题!简单:我希望在单击某个元素时运行代码a(而不是代码b),在单击其他非该元素时运行代码b(而不是代码a)。您只需要
body
的eventhandler。只需检查单击是否在该特定元素上,然后执行该操作或该操作。请检查?我很困惑,不明白这个问题!简单:我希望在单击某个元素时运行代码a(而不是代码b),在单击其他非该元素时运行代码b(而不是代码a)。您只需要
body
的eventhandler。只需检查单击是否在该特定元素上,然后执行该操作或该操作。请检查?美好的我能加两个“不”吗?很好!我可以添加两个“not”吗?
在单击某个元素时触发某些代码,另一个在单击该元素以外的任何内容时切换某些代码。
+1无论如何,OP也可以编辑代码来执行此操作;)
在单击某个元素时触发某些代码,如果单击了该元素以外的任何元素,则切换某些代码。
+1无论如何,OP也可以编辑代码来执行此操作;)。