关闭开放子菜单 – jQuery手风琴

我有一个jQuery菜单,我希望能够关闭一个打开的菜单(以便关闭所有菜单)。 它在一分钟关闭的唯一方法是点击打开另一个菜单,我已经工作了很长时间并且相对无处。 有没有什么办法可以让你打开菜单关闭而不点击不同的菜单。

这是代码:

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

HTML

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') } }) }) 

尝试使用此代码:

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