Javascript 如果单击div外部(目标类),则删除类

Javascript 如果单击div外部(目标类),则删除类,javascript,jquery,Javascript,Jquery,我有一个菜单,用户点击链接,列表通过.addClass(“show nav”)显示 以下是JS代码: jQuery(".nav-js-trigger").each(function(){ this.onclick = function() { var hasClass; hasClass = jQuery(this).next().hasClass( "show-nav" ); jQuery('.show-nav').removeCla

我有一个菜单,用户点击链接,列表通过
.addClass(“show nav”)
显示

以下是JS代码:

jQuery(".nav-js-trigger").each(function(){
    this.onclick = function() {

        var hasClass;
        hasClass = jQuery(this).next().hasClass( "show-nav" );

        jQuery('.show-nav').removeClass('show-nav');

        if (hasClass === false) {
            jQuery(this).next().addClass( "show-nav" );
        }

    }
});
如果用户使用class
show nav
在div的外部单击,我想删除class
show nav
我该怎么做?


我看到过
e.target
div ID而非class的示例,尤其不是这样的场景。

您可以在元素上添加一个带有
event.stopPropagation()
的侦听器,并在主体上添加另一个侦听器,以便在之前未被拦截的情况下捕获此事件

大概是这样的:

$(".show-nav").on("click", function(event){
    event.stopPropagation();
});

$("body").on("click", function(event){
    $(".show-nav").hide(); // or something...
});
为了简化您的用例,下面是一个示例

$(.trigger”)。在(“单击”)上,函数(事件)
{
$(“.menu”).toggle();
event.stopPropagation();
});
$(“.menu”)。在(“单击”上,函数(事件)
{
event.stopPropagation();
});
$(文档)。在(“单击”)上,函数(事件)
{
$(“.menu”).hide();
});
菜单
{
显示:无;
背景:黄色;
}


您好
您可以将一个侦听器添加到包含
事件的元素中。stopPropagation()
,并将另一个侦听器添加到主体中,以捕获此事件(如果之前未被拦截)

大概是这样的:

$(".show-nav").on("click", function(event){
    event.stopPropagation();
});

$("body").on("click", function(event){
    $(".show-nav").hide(); // or something...
});
为了简化您的用例,下面是一个示例

$(.trigger”)。在(“单击”)上,函数(事件)
{
$(“.menu”).toggle();
event.stopPropagation();
});
$(“.menu”)。在(“单击”上,函数(事件)
{
event.stopPropagation();
});
$(文档)。在(“单击”)上,函数(事件)
{
$(“.menu”).hide();
});
菜单
{
显示:无;
背景:黄色;
}


你好
请在你的问题中发布一个完整的代码示例。请在你的问题中发布一个完整的代码示例。你能更新小提琴吗?我尝试添加您的代码,但不幸的是没有成功:@henrikpeterson,添加了JSFIDLE和代码片段。。。我已经改变了你的一点(好的,很多),使它更简单,更灵活…非常感谢你的更新,虽然现在你不能隐藏div当你再次点击菜单。若你们看到我原来的提琴并点击菜单两次,你们就会明白我的意思:--一旦这个问题合格,我将以50分奖励它。@Henrikpeterson,没问题。。。只需再次更新代码,将
$(“.trigger”)
中的
.show()
更改为
.toggle()
。。。你能再试一次吗?很好,尽管我还有最后一个要求。代码需要使用它的原始方法,将show nav类添加到div。您的方法仍然可以这样做吗?您可以更新fiddle吗?我尝试添加您的代码,但不幸的是没有成功:@henrikpeterson,添加了JSFIDLE和代码片段。。。我已经改变了你的一点(好的,很多),使它更简单,更灵活…非常感谢你的更新,虽然现在你不能隐藏div当你再次点击菜单。若你们看到我原来的提琴并点击菜单两次,你们就会明白我的意思:--一旦这个问题合格,我将以50分奖励它。@Henrikpeterson,没问题。。。只需再次更新代码,将
$(“.trigger”)
中的
.show()
更改为
.toggle()
。。。你能再试一次吗?很好,尽管我还有最后一个要求。代码需要使用它最初的方法将show nav类添加到div中。您的方法仍然可以这样做吗?