Bootstrap:如何在菜单外单击时关闭打开的折叠导航栏?

时间:2015-11-20 10:23:41

标签: jquery collapse dropdown

我想在用户点击菜单外部时关闭我的菜单,而不仅仅是在navbar元素之外。因为我的菜单中有更多崩溃,所以此解决方案对我不起作用:How to close an open collapsed navbar when clicking outside of the navbar element in Bootstrap 3? 当我点击菜单外单时,菜单会消失,但当我点击带有下拉列表的链接时,整个菜单会崩溃。

<div class="collapse navbar-collapse nav-mobile" id="bs-example-navbar-collapse-1">
    <ul class="nav navbar-nav">
        <li class="list-group panel">
            <a href="#submenu-1" class="list-group-item" data-toggle="collapse" data-parent="#MainMenu">Webshop</a>
            <ul class="collapse" id="submenu-1">
                <a href="#SubMenu1" class="list-group-item" data-toggle="collapse" data-parent="#SubMenu1">Industriële verpakkingen</a>
                <a href="javascript:;" class="list-group-item">Promotionele verpakkingen</a>
                <a href="javascript:;" class="list-group-item">Gelamineerde verpakkingen</a>
                <a href="javascript:;" class="list-group-item">Enveloppen &verzend verpakkingen</a>
                <a href="javascript:;" class="list-group-item">Medische verpakkingen</a>
                <a href="javascript:;" class="list-group-item">Co-packing</a>
            </ul>
        </li>
    </ul>

3 个答案:

答案 0 :(得分:6)

如果不点击链接,您可以使用此功能进行折叠: fiddle

$(document).click(function(e) {
    if (!$(e.target).is('a')) {
        $('.collapse').collapse('hide');        
    }
});

答案 1 :(得分:0)

另一种选择,您可以在下面添加代码:

&#13;
&#13;
<script>
	$(document).ready(function(){
		$(".list-group ").hover(            
		function() {
			$('.collapse', this).stop( true, true ).slideDown("fast");
			$(this).toggleClass('open');        
		},
		function() {
			$('.collapse', this).stop( true, true ).slideUp("fast");
			$(this).toggleClass('open');       
		}
		);
	});
</script>
&#13;
&#13;
&#13;

另一个例子:dtc-eng

答案 2 :(得分:0)

以下是我对此的看法:

$(document).on('click', function(event){
  var $clickedOn = $(event.target),
      $collapsableItems = $('.collapse'),
      isToggleButton = ($clickedOn.closest('.navbar-toggle').length == 1),
      isLink = ($clickedOn.closest('a').length == 1),
      isOutsideNavbar = ($clickedOn.parents('.navbar').length == 0);

  if( (!isToggleButton && isLink) || isOutsideNavbar ) {
    $collapsableItems.each(function(){
      $(this).collapse('hide');
    });
  }
});

此解决方案处理:

  • 单页网站/应用程序(也将在多页面上工作)。
  • 点击:
    • .navbar-toggle个元素(可以是<buttons><a>,它会处理潜在内部元素的点击,例如<span><strong>或其他任何内容。
    • 简单<a>元素(同样,它处理内部元素的点击)。
    • 就在某个特定父母之外(即.navbar)。
  • 可以打开的多个可折叠(.collapse)元素(与它们放置在DOM中的位置不明)。

对你来说还不够?没问题。您可以自定义传递给jQuery(document.collapse.navbar等)的大多数选择器,以满足您的需求,甚至可以添加更多条件。