jQuery not().bind(';单击';);不';行不通

jQuery not().bind(';单击';);不';行不通,jquery,Jquery,关于: 类似于#supcont的行为不排除在外。为什么?。我认为它可能不是的唯一原因是,您的#supcont元素是div的后代,当click事件出现时,div将接收它。要防止这种情况发生,可以使用事件对象的stopPropagation方法: jQuery("#supcont").click(); 更新(见评论) 事实上,如果#supcont是另一个div的后代,上述方法对您没有帮助,您需要捕获#supcont上的事件并将其停止。因此,也将单击事件处理程序绑定到#supcont: jQuery

关于:

类似于
#supcont
的行为不排除在外。为什么?

。我认为它可能不是的唯一原因是,您的
#supcont
元素是
div
的后代,当click事件出现时,
div
将接收它。要防止这种情况发生,可以使用事件对象的
stopPropagation
方法:

jQuery("#supcont").click();
更新(见评论)

事实上,如果
#supcont
是另一个
div
的后代,上述方法对您没有帮助,您需要捕获
#supcont
上的事件并将其停止。因此,也将单击事件处理程序绑定到
#supcont

jQuery('div').not("#supcont").bind('click', function(e) {
    e.stopPropagation();
    jQuery("#supcont").slideUp("slow");
});
它。我认为它可能不是的唯一原因是,您的
#supcont
元素是
div
的后代,当click事件出现时,
div
将接收它。要防止这种情况发生,可以使用事件对象的
stopPropagation
方法:

jQuery("#supcont").click();
更新(见评论)

事实上,如果
#supcont
是另一个
div
的后代,上述方法对您没有帮助,您需要捕获
#supcont
上的事件并将其停止。因此,也将单击事件处理程序绑定到
#supcont

jQuery('div').not("#supcont").bind('click', function(e) {
    e.stopPropagation();
    jQuery("#supcont").slideUp("slow");
});

另一种写法是:

jQuery("#supcont").click(function(e) {
    e.stopPropagation();
});

另一种写法是:

jQuery("#supcont").click(function(e) {
    e.stopPropagation();
});

您不应该向页面上的每个
标记添加事件,而应该在整个
文档中添加单个事件处理程序。您应该检查使用事件委派和“冒泡”的方法


您应该在整个
文档中添加单个事件处理程序,而不是在页面上的每个
标记中添加事件。您应该检查使用事件委派和“冒泡”的方法



可能是因为
#supcont
在另一个
div
中。事件在树上冒泡。你想做什么?它表演得很漂亮!问题在于你做事的方式。告诉我们您想做什么。您必须显示HTML代码以便我们进行调试,但我将钱花在@FelixKling的答案上。这似乎可行:您需要提供相关的标记。您好。谢谢你的回答。我想触发:jQuery(“#supcont”).slideUp(“slow”);单击任何需要div#supcont的地方。可能是因为
supcont
在另一个
div
中。事件在树上冒泡。你想做什么?它表演得很漂亮!问题在于你做事的方式。告诉我们您想做什么。您必须显示HTML代码以便我们进行调试,但我将钱花在@FelixKling的答案上。这似乎可行:您需要提供相关的标记。您好。谢谢你的回答。我想触发:jQuery(“#supcont”).slideUp(“slow”);单击任何需要div#supcont的地方。您必须将单击事件处理程序附加到
#supcont
,以防止冒泡。如下所示:
$(“#supcont”)。单击(false)
。实际上可能有两个原因:要么
#supcont
div
内,要么
div
#supcont
内。你必须同时考虑这两个问题。哦,是的!这是真的。我是混血儿和祖先!更新。(使用仍在
#supcont
中的
stopPropagation
单击事件处理程序只是为了清晰起见,而不是您对
的建议。单击(false)
,这当然是完全有效的)。@FelixKling:
stopPropagation()
是否足够?@Eric:如果您在回答中引用原始代码,则否,因为单击事件仍然会从
#supcont
冒泡到某个父级
div
。然后,传播将停止,动画将发生。您确实需要向
#supcont
添加事件处理程序并停止传播。实际上,您还必须排除
#supcont
的所有后代。要扩展我的另一点:您不仅应该排除
#supcont
,还应该排除其所有后代。是的,将阻止事件冒泡,但动画(
jQuery(“#supcont”).slideUp(“slow”);
)仍将发生。您必须将单击事件处理程序附加到
#supcont
,以防止冒泡。如下所示:
$(“#supcont”)。单击(false)
。实际上可能有两个原因:要么
#supcont
div
内,要么
div
#supcont
内。你必须同时考虑这两个问题。哦,是的!这是真的。我是混血儿和祖先!更新。(使用仍在
#supcont
中的
stopPropagation
单击事件处理程序只是为了清晰起见,而不是您对
的建议。单击(false)
,这当然是完全有效的)。@FelixKling:
stopPropagation()
是否足够?@Eric:如果您在回答中引用原始代码,则否,因为单击事件仍然会从
#supcont
冒泡到某个父级
div
。然后,传播将停止,动画将发生。您确实需要向
#supcont
添加事件处理程序并停止传播。实际上,您还必须排除
#supcont
的所有后代。要扩展我的另一点:您不仅应该排除
#supcont
,还应该排除其所有后代。是的,将阻止事件冒泡,但动画(
jQuery(#supcont”).slideUp(“slow”);
)仍将发生。
将始终引用处理程序绑定到的元素。因此,如果单击
#supcont
位于
div
内或
div
位于
#supcont
内,则动画也会发生(这是不需要的)。将测试更改为
if($(event.target).closest('#supcont')。length==0)
应该可以<代码>事件目标