2012-04-13 134 views
0

我正在努力与此JavaScript此刻。Javascript onclick下拉菜单

$(document).ready(function() { 
     var visible = false; 
     var body = false; 

     $("body").mouseup(function() { 
      if (visible) { 
       $(this).parent().find("ul.subnav").slideUp('slow'); 
       visible = false; 
       $(this).removeClass("clicked-background"); 
       body = true; 
      } 
     }); 

     $("ul.topnav li a").click(function() { //When trigger is clicked... 
      var menu = $(this).parent().find('ul.subnav'); 

      if (!visible && !body) { 
       $(this).parent().find("ul.subnav").slideDown('fast').show(); 
       visible = true; 
       $(this).addClass("clicked-background"); 
      } 
      // else if (visible) 
      //{ 
      // $(this).parent().find("ul.subnav").slideUp('slow'); 
      // visible = false; 
      // $(this).removeClass("clicked-background"); 
      // } 

      body = false; 
     }); 

    }); 

我想添加该功能,所以如果您在菜单/导航栏外单击,下拉框将隐藏。 这个代码目前的问题是,如果你点击菜单,然后在菜单外单击 - 你必须再次双击菜单才能让它显示出来。这是由于body变量设置为'True'ofc。

如果您点击菜单,然后再次单击相同的链接,我使身体变量试图解决问题。菜单将首先正确打开,然后关闭并再次打开。 Soo的主要问题是。我的导航打开 - >关闭 - >打开

+0

PLZ上jsfiddle.net添加的jsfiddle – sakhunzai 2012-04-13 20:01:44

回答

3

不要使用全局变量。通过检查来检查实际元素是否可见

.is(':visible'); 

您可以在您现在使用的各种选择器上使用它。

+0

非常感谢,现在的工作! :) – KLIM8D 2012-04-13 20:07:46

0

我会被诱惑的onmouseout作为选择的情况下“现在可见的”菜单的使用..

我不认为运行事件脱去了身上的标签是要走的好办法。

的流动应该是..

click (menu button or link) 
show menu 
set onmouseout for button and menu on click 
onmouseout, remove onmouseout events