Bootstrap 3折叠菜单未单击关闭

Par*_*oia 119 html css navigation twitter-bootstrap

我有一个或多或少来自bootstrap 3的标准导航

<body data-spy="scroll" data-target=".navbar-collapse">
    <!-- ---------- Navigation ---------- -->
    <div class="navbar navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                </button>
                <a class="navbar-brand" href="index.html"> <img src="#"></a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-right">
                    <li class="active"><a href="#home">Home</a></li>
                    <li><a href="#one">One</a></li>
                    <li><a href="#two">Two</a></li>
                    <li><a href="#three">Three</a></li>
                    <li><a href="#four">Four</a></li>
                </ul>
            </div>
        </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

它在较小的设备上正常崩溃.单击菜单按钮可以展开菜单,但如果我在菜单链接上单击(或触摸),菜单将保持打开状态.我该怎么办,再次关闭它?

Kev*_*son 133

只是为了在GitHub上的解决方案中分享这个,这是最受欢迎的答案:

https://github.com/twbs/bootstrap/issues/9013#issuecomment-39698247

$(document).on('click','.navbar-collapse.in',function(e) {
    if( $(e.target).is('a') ) {
        $(this).collapse('hide');
    }
});
Run Code Online (Sandbox Code Playgroud)

这是连接到文档,因此您不必在ready()上执行此操作(您可以动态地将链接附加到菜单,它仍然可以工作),并且只有在菜单已经展开时才会调用它.有些人报告了菜单打开时出现的奇怪闪烁,然后立即关闭了其他代码,这些代码没有验证菜单是否具有"in"类.

[UPDATE 2014-11-04]显然在使用子菜单时,上面会引起问题,所以上面修改为:

$(document).on('click','.navbar-collapse.in',function(e) {
    if( $(e.target).is('a:not(".dropdown-toggle")') ) {
        $(this).collapse('hide');
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 122

改变这个:

<li><a href="#one">One</a></li>
Run Code Online (Sandbox Code Playgroud)

对此:

<li><a data-toggle="collapse" data-target=".navbar-collapse" href="#one">One</a></li>  
Run Code Online (Sandbox Code Playgroud)

这个简单的改变对我有用.

参考:https://github.com/twbs/bootstrap/issues/9013

  • @ AymanAl-Absi你必须在`data-target`值的末尾添加`.in`:`data-target =".navbar-collapse.in"`.从这个答案的评论:http://stackoverflow.com/a/21797534/89818 (21认同)
  • 此解决方案适用于移动视图,但一旦链接点击它就会在大屏幕中显示显示/隐藏动画. (14认同)

rai*_*tin 52

我有同样的问题,但由于包含两次 bootstrap.jsjquery.js文件引起的.

只需单击一次,两个jquery实例就会处理两次事件.一个关闭,一个打开了切换.

  • 我有完全相同的问题,但没有意识到他们被包括两次.感谢您发布此内容! (3认同)
  • 我们的实习生也是.感谢发布此内容. (2认同)
  • 人!我做了同样的事情 - 我想我又回到了实习生那里! (2认同)
  • 太有帮助了!我这几天都在研究这个问题.这在使用导航栏模板时非常常见.小心的人!:) (2认同)
  • 这应该被标记为最佳答案.我有同样的问题删除bootstrap.js解决了这个问题 (2认同)

VCN*_*inc 47

Bootstrap的默认设置是在单击菜单项时保持菜单打开.您可以通过调用.collapse('hide');要折叠的jQuery元素来手动覆盖此行为.

  • 这是错误的,bootstrap自动切换"崩溃"类.您不需要任何其他jquery代码.如果你有这样的行为,那就意味着你的html代码出了问题(就我而言,我包括两次jquery和bootstrap,请参阅@raisercostin的答案). (5认同)
  • 我们可以举一个例子吗? (3认同)

小智 17

$(".navbar-nav li a").click(function(event) {
    if (!$(this).parent().hasClass('dropdown'))
        $(".navbar-collapse").collapse('hide');
});
Run Code Online (Sandbox Code Playgroud)

这有助于处理导航栏中的下拉菜单


小智 10

我与Bootstrap 4,alpha-6有类似的问题,Joakim Johansson的回答让我开始朝着正确的方向前进.不需要JavaScript.将data-target =".navbar-collapse"和data-toggle ="collapse"放入导航内的div标签,但围绕链接/按钮,对我有用.

<div class="navbar-nav" data-target=".navbar-collapse" data-toggle="collapse">
   <a class="nav-item nav-link" href="#">Menu Item 1</a>
   ...
</div>
Run Code Online (Sandbox Code Playgroud)


Sye*_*yed 6

我知道这个问题是针对Bootstrap 3的,但如果您正在寻找Bootstrap 4的解决方案,请执行以下操作:

$(document).on('click','.navbar-collapse.show',function(e) {
  $(this).collapse('hide');
});
Run Code Online (Sandbox Code Playgroud)


wea*_*ide 5

我做到了

$(".navbar-toggle").click(function(event) {
    $(".navbar-collapse").toggle('in');
});
Run Code Online (Sandbox Code Playgroud)


Den*_*sol 5

我有同样的问题,我正在使用jQuery-1.7.1bootstrap 3.2.0.我将我的jQuery版本更改为最新jquery-1.11.2版本(),一切正常.