javascript - 关闭打开的子菜单 - jQuery Accordion

标签 javascript jquery html

我有一个 jQuery 菜单,我希望能够关闭一个打开的菜单(以便关闭所有菜单)。它现在关闭的唯一方法是单击打开另一个菜单,我已经工作了很长时间并且相对无处可去。有什么方法可以让我在不单击其他菜单的情况下关闭打开的菜单。

代码如下:

http://jsfiddle.net/52EH8/9/

HTML

<ul id="nav">
<li> <a href="#">Menu 1</a>

    <ul>
        <li><a href="#">Sub Menu 1</a>
        </li>
        <li><a href="#">Sub Menu 2</a>
        </li>
        <li><a href="#">Sub Menu 3</a>
        </li>
        <li><a href="#">Sub Menu 4</a>
        </li>
    </ul>
</li>
<li> <a href="#">Menu 2</a>

    <ul>
        <li><a href="#">Sub Menu 5</a>
        </li>
        <li><a href="#">Sub Menu 6</a>
        </li>
        <li><a href="#">Sub Menu 7</a>
        </li>
        <li><a href="#">Sub Menu 8</a>
        </li>
        <li><a href="#">Sub Menu 9</a>
        </li>
    </ul>
</li>
<li><a href="#">Menu 3 - No Submenu</a>
</li>
<li> <a href="#">Menu 4</a>

    <ul>
        <li><a href="#">Sub Menu 10</a>
        </li>
        <li><a href="#">Sub Menu 11</a>
        </li>
        <li><a href="#">Sub Menu 12</a>
        </li>
        <li><a href="#">Sub Menu 13</a>
        </li>
    </ul>
</li>
<li> <a href="#">Menu 5</a>

    <ul>
        <li><a href="#">Sub Menu 14</a>
        </li>
        <li><a href="#">Sub Menu 15</a>
        </li>
        <li><a href="#">Sub Menu 16</a>
        </li>
        <li><a href="#">Sub Menu 17</a>
        </li>
        <li><a href="#">Sub Menu 18</a>
        </li>
    </ul>
</li>

jQuery

 function initMenu() {
 $('#nav ul').hide();
 $('#nav li a').click(

 function () {
     var checkElement = $(this).next();
     if ((checkElement.is('ul')) && (checkElement.is(':visible'))) {
         return false;
     }
     if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
         removeActiveClassFromAll();
         $(this).addClass("active");
         $('#nav ul:visible').slideToggle('normal');
         checkElement.slideToggle('normal');
         return false;
     }
 });
 }
 function removeActiveClassFromAll() {
     $('#nav li a').each(function (index) {
          $(this).removeClass("active");
      });
     }
 $(document).ready(function () {initMenu();});

非常感谢任何帮助,谢谢。

最佳答案

DEMO

function initMenu() {
 $('#nav ul').hide();
 $('#nav li a').click(

 function () {
     var checkElement = $(this).next();
     if ((checkElement.is('ul')) && (checkElement.is(':visible'))) {
         $('#nav ul:visible').slideToggle('normal'); //EDITED:-close the menu if clicked again
     }
     if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
         removeActiveClassFromAll();
         $(this).addClass("active");
         $('#nav ul:visible').slideToggle('normal');
         checkElement.slideToggle('normal');
         return false;
     }

     //NEW CONDITION ADDED TO CLOSE ANY VISIBLE MENU WHEN MENU WITHOUT SUB MENU IS CLICKED
     if($(this).siblings('ul').length==0 && $(this).parent().parent().attr('id')=='nav')
     {

         removeActiveClassFromAll();
         $(this).addClass("active");
         $('#nav ul:visible').slideToggle('normal');

         return false;
     }
 });
}

function removeActiveClassFromAll() {
 $('#nav li a').each(function (index) {
     $(this).removeClass("active");
 });
}


$(document).ready(function () {
   initMenu();
});

//PART BELOW IS TO CLOSE TO MENU WHEN CLICK IS DETECTED ELSEWHERE ON DOCUMENT

$('#nav').click(function (e)

{
   e.stopPropagation();
})


 $(document).click(function () {
     $('#nav').children('li').each(function () {

       if ($(this).children('ul').css('display') == 'block') {
           $(this).children('ul').slideToggle('normal')
           $(this).children('a').removeClass('active')
       }
     })

 })

关于javascript - 关闭打开的子菜单 - jQuery Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768802/

相关文章:

html - 如何使侧边栏高度依赖于内容高度?

javascript - 如何从文档片段中获取实际元素?

javascript - 自动将网页打印成pdf

javascript - 如何在谷歌地图中点击矩形时获取经纬度?

javascript - Thickbox - 不会在 Chrome 中关闭

javascript - 选择任何选项时未捕获的类型错误 : Cannot read property 'current' of null - Select2. js

javascript - CORS 问题 : header contains multiple values, 但只允许一个

javascript - 是否可以使用简写将数据添加到选项中?

javascript - 带有箭头功能的jquery

javascript - 如何修改轴文本的sencha图表中的字体颜色和字体大小