2013-10-22 74 views
0

我有一个下拉菜单,但我可以得到li s点击后保持可见。 我要的是li s到隐藏当我点击菜单以外的区域或在ul点击链接后禁用菜单隐藏

我尝试使用return false;event.stopPropagation();但我无法得到它的工作 - 我希望某人知道如何解决这个问题 - 我认为这应该相当简单。

这里是我的代码:

<link rel="stylesheet" href="css/4style.css" type="text/css" media="screen"> 
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 

<ul id="nav"> 
    <li > 
     <a href="#">Topic 1</a> 
     <ul class="show"> 
      <li><a href="#">Link 1</a></li> 
      <li><a href="#">Link 2</a></li> 
      <li><a href="#">Link 3</a></li> 
      <li><a href="#">Link 4</a></li> 
      <li><a href="#">Link 5</a></li> 
     </ul> 
    </li> 

    <li > 
     <a href="#">Topic 2</a> 
     <ul class="show"> 
      <li><a href="#">Link 1</a></li> 
      <li><a href="#">Link 2</a></li> 
      <li><a href="#">Link 3</a></li> 
      <li><a href="#">Link 4</a></li> 
      <li><a href="#">Link 5</a></li> 
     </ul> 
    </li> 
</ul> 

<script type="text/javascript"> 
    $(document).ready(function(){ 

    $('#nav li a').click(function() { // binding onclick 
     if ($(this).hasClass('select_ul')) { 

      $("#nav li ul").slideUp(100); // hiding submenu 
      $("#nav .select_ul").removeClass("select_ul"); 
     } else { 

      $("#nav li ul").slideUp(100); // hiding submenu 
      $("#nav .select_ul").removeClass("select_ul"); 

      if ($(this).next(".show").length) { 
       $(this).addClass("select_ul"); // display popup 
       $(this).next(".show").slideDown(200);  
      } 
     } 
    }); 

    $('#nav li ul li a').click(function() { 
     $("#nav li ul li a.select_li").removeClass("select_li"); 
     $(this).addClass('select_li'); 
    }); 

    // SKJUL NAV VED KLIK UDENFOR 
    $('html').click(function() { 
     $("#nav").hide(100); 
    }); 

    $('#nav').click(function(event){ 
    event.stopPropagation(); 
}); 

}); //END OF DOCUMENT READY 
</script> 

回答

0

试试这个,

$(document).ready(function() { 
    $('ul#nav > li > a').click(function() { // onclick for parent anchor tags 
     $("#nav li ul").hide(); // hiding submenu 
     $("#nav .select_ul").removeClass("select_ul"); 

     if ($(this).next(".show").length) { 
      $(this).addClass("select_ul"); // display popup 
      $(this).next(".show").slideDown(200); 
     } 
    }); 
    $('#nav li ul li a').click(function (e) { 
     e.preventDefault(); 
    }); 
    // SKJUL NAV VED KLIK UDENFOR 
    $('html').click(function() { 
     $("#nav").hide(100); 
    }); 
}); 

Demo 1

更新,是的,它是因为$( 'HTML')点击()。评论或删除此event将解决此问题,如

$('html').click(function() { 
     // $("#nav").hide(100); 
}); 

Demo 2

+0

对不起罗汉 - 只是使当你点击它的整个菜单消失? – jan199674

+0

如何添加CSS?不习惯Stackoverflow .. – jan199674

+0

@KennethHayes我更新了我的答案检查它。 –

0

我决定剥离回来的东西一点点,因为你想slideDown()slideUp(),我选择来检查的知名度,但在其他方面我的使用jQuery的toggle()

$('#nav li').on('click', function(e) { 

    e.stopPropagation(); 

    /** 
    * $Menu 
    *  - get the child list of the 
    *   currently clicked Menu. 
    * 
    * $thisMenu 
    *  - Transvrse up the tree to find 
    *   the User's Click, of <li> 
    *   or <a> parent list container. 
    * 
    *  $activeMenus 
    *  - Get Menus other than the current 
    *   list clicked. 
    **/ 
    var $Menu = $(this).children('ul.show'), 
     $thisMenu = $(e.target).closest('.show'), 
     $activeMenus = $('#nav li').not(this).find('ul.show'); 

    /** 
    * Only If the Clicked menu isn't visible 
    **/ 
    if (!$Menu.is(':visible')) { 

     /** 
     * If this menu here, doesn't the Class 'Active' 
     * Slide up other Active menus. 
     **/ 
     if (!$thisMenu.hasClass('active')) 
      $activeMenus.slideUp().removeClass('active'); 

     /** 
     * Give this menu a new Class of Active 
     * Adding Purple background && Slide it down. 
     **/ 
     $Menu.slideDown().addClass('active');   
    } 
}); 

你的确是正确的使用event.stopPropagation();在click事件后立即打电话。

小提琴http://jsfiddle.net/axKjT/2/

+0

Thx MackieeE - 越来越近 - 但是随着你的版本的“选择”或“主动”效果丢失(在“主题”中的fx紫色背景) - 我如何将它嵌入代码中? 另一件事是,单击一个“主题”应该隐藏任何开放的“​​主题” - 多数民众赞成在没有.. 我不是一个JQuery专家 - 所以我必须问.. – jan199674

+0

@KennethHayes没问题! :)我用评论更新了我的回答,以描述发生的事情,以及您的紫色背景:D – MackieeE

0

笑纳下面的例子:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 

<ul id="nav"> 
<li class="nav2"><a href="#">Approved</a> 
    <ul> 
     <li class="pft-file ext-approved"><a href="javascript:alert('ok');">051254-251</a></li> 
     <li class="pft-file ext-approved"><a href="javascript:alert('ok');">051254-252</a></li> 
     <li class="pft-file ext-approved"><a href="javascript:alert('ok');">051254-253</a></li> 
     <li class="pft-file ext-approved"><a href="javascript:alert('ok');">051254-254</a></li> 
     <li class="pft-file ext-approved"><a href="javascript:alert('ok');">051254-255</a></li> 
    </ul> 
</li> 

<script type="text/javascript"> 
$(document).ready(function() { 

// Hide all subfolders at startup 
$("#nav").find("UL").hide(); 

// Expand/collapse on click 
$(".nav2 A").click(function() { 
    $(this).parent().find("UL:first").slideToggle("medium"); 
    if($(this).parent().attr('className') == "nav2") return false; 
}); 

}); 
</script>