javascript - 隐藏 body 点击上的子菜单

标签 javascript jquery

在我的导航中,用户单击链接以打开子菜单。按照目前的情况,子菜单将保持打开状态,直到再次单击其父链接。我希望拥有它,以便用户单击页面上的任何位置但在子菜单隐藏的子菜单内。

我想要开始工作的代码是:

for(var i=0; i<$('#topNav ul li').length; i++){
    if(openMenu[i] == 1){ 
        //i use an array to keep track of which submenu is open
        //all 'closed' or hidden submenus are assigned a value of 0 in the array,
        //the open submenu gets a value of 1
        $('body').not('#submenu'+i).click(function(){
            $('#submenu'+i).hide();
        });
    }   
}

问题是当我点击正文时没有任何反应。我在 jsfiddle 上设置了一个基本示例,它是 here

我有什么遗漏的吗?不能使用body标签作为点击事件的选择器吗?

最佳答案

您可能想尝试这样的事情:

JS:

$(function(){
    var visible = false;
    $('button').click(function(e){
        $('.menu').hide();
        var $ref = $(this).attr('ref');
        $('#menu'+$ref).show();
    });
});

HTML:

<div class='menu' id='menu1' style='background-color:#f00;'></div>
<div class='menu' id='menu2' style='background-color:#ff0;'></div>
<div class='menu' id='menu3' style='background-color:#f0f;'></div>
<button ref='1'>Click Me 1</button>
<button ref='2'>Click Me 2</button>
<button ref='3'>Click Me 3</button>

fiddle :http://jsfiddle.net/maniator/46wuy/4/

减少每次点击时都需要一个 for 循环

编辑
为了解决您的评论:

$('*').click(function(e){
     e.stopPropagation();
    if($(e.currentTarget).not($('.menu, button')).length  > 0){
         $('.menu').hide();
    }
});

fiddle :http://jsfiddle.net/maniator/46wuy/7/

关于javascript - 隐藏 body 点击上的子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019580/

相关文章:

jquery - AngularJS 中的 $(this) 相当于什么

JQuery AJAX 发布到 asp.net webmethod 永远不会被调用

jquery - 检查是否存在具有特定 id 且位于具有特定类的元素之前的元素

javascript - Globalize.format 不适用于其他区域设置或日期格式

javascript - 单击 "update"后,检查与正在编辑的帖子对应的单选按钮,如果存在验证错误

javascript - 并行执行中两个实例之间的 Protractor 延迟

javascript - 使用 javascript 更改 css 代码

javascript - 如何应用这个AJAX请求而不需要重新加载页面才能生效?

javascript - 使用 React 更新状态不会更新 IE9 中的 DOM

javascript - 当所选选项禁用时禁用按钮提交