0

我已经编写了这段代码,当单击另一个 div 时会显示一个菜单(div)。问题是,当我打开其中一个菜单并单击 div 打开一个新菜单(有多个菜单循环出来)时,其他菜单不会关闭。这意味着我可以同时打开无限数量的菜单,只要我没有在 div/菜单之外单击...

简短:我希望在单击打开新菜单时隐藏所有打开的菜单 div,除了我刚刚打开的菜单...

代码:

$('.commentSettings').click(function(e) {
    var id = $(this).attr('id');
    $('#mod-dropdown' + id).stop().toggle(200);
    e.stopPropagation();
    $('#mod-dropdown' + id).show();

    $(document).click(function(){
        $("#mod-dropdown" + id).hide();
    });
 });
4

4 回答 4

1

例如,如果您给所有要隐藏类的 div menu,那么您只需$('.menu').hide();在 click 函数的开头弹出即可。

请注意,您已在函数内准备好一个文档,我认为您不想将其放在那里。document.ready 函数应该总是首先出现,并且你在其中注册你的事件处理程序。

于 2013-02-10T20:10:14.043 回答
0

我认为所有菜单都有一个共同的类别。使用它首先关闭所有菜单。然后打开当前点击的那个。

于 2013-02-10T20:08:51.170 回答
0

你可以有这样的东西:

var id = -1;
$('.commentSettings').click(function(e) {
    if( id != -1 )
        $('#mod-dropdown' + id).hide();
    var id = $(this).attr('id');
    $('#mod-dropdown' + id).stop().toggle(200);
    e.stopPropagation();
    $('#mod-dropdown' + id).show();

    $(document).click(function(){
        $("#mod-dropdown" + id).hide();
    });
});
于 2013-02-10T20:10:40.900 回答
0

这应该有效:

 $('.commentSettings').click(function(e) {
    var id = $(this).attr('id');
    $('#mod-dropdown' + id).stop().toggle(200);
    e.stopPropagation();
    $('#mod-dropdown' + id).show();
 });

 $(document).click(function(){
    $('[id^="#mod-dropdown"]').hide();
});

我在这里使用 jQueryattributeStartsWith选择器。

您可以在这里找到更多信息:http: //api.jquery.com/attribute-starts-with-selector/

于 2013-02-10T20:11:28.963 回答