15

看看小提琴。我有一个基本的 Bootstrap 3 响应式导航,如下所示:

    <div id="navbar" class="navbar navbar-fixed-top navbar-inverse">
        <div class="container">
            <a id="navbar-toggle" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </a>

            <a class="navbar-brand" href="#">Title Title Title</a>

            <div id="nav-collapse" class="nav-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a href="#option1">Option 1</a></li>
                    <li><a href="#option2">Option 2</a></li>
                    <li><a href="#option3">Option 3</a></li>
                </ul>
            </div>
        </div>
    </div>

导航项目链接到页面上的部分,而不是不同的页面,所以我需要下拉菜单在点击时隐藏。

每当我尝试使用 jQuery 手动切换下拉菜单时,它都会破坏下拉切换按钮的未来功能:

$("#navbar li a").click(function(event) {
    // check if window is small enough so dropdown is created
    $("#navbar-toggle").is(":visible")
        $("#nav-collapse").toggle();
});

有更好的解决方法吗?

4

6 回答 6

24

如果您想在没有 JavaScript 的情况下执行此操作,您可以简单地将 data-target 和 data-toggle 添加到每个列表项,如下所示:

<li data-toggle="collapse" data-target=".nav-collapse"><a href="#option1">Option 1</a></li>
<li data-toggle="collapse" data-target=".nav-collapse"><a href="#option2">Option 2</a></li>
<li data-toggle="collapse" data-target=".nav-collapse"><a href="#option3">Option 3</a></li>

对于导航栏,这仅在有切换按钮时才在移动视图模式下有效。当导航栏暴露时会发生奇怪的事情(未显示切换按钮)。

于 2013-10-25T06:14:40.483 回答
8

改变这个:

$(document).ready(function () {
    $("#navbar li a").click(function(event) {
        // check if window is small enough so dropdown is created
        $("#navbar-toggle").is(":visible")
            $("#nav-collapse").toggle();
    });
  });

对此:

$(document).ready(function () {
    $("#navbar li a").click(function(event) {
        // check if window is small enough so dropdown is created
    $("#nav-collapse").removeClass("in").addClass("collapse");
    });
});

http://jsfiddle.net/fw7vh/4/

于 2013-08-09T19:06:07.980 回答
3

我不知道为什么在折叠的导航栏中单击/点击菜单下拉菜单中的菜单项不会自动切换 Bootstrap 中的菜单。可能有一种更优雅的方法可以做到这一点,但是,这是我修复它的方法(使用 Bootstrap 3.0.3):

<li class="visible-xs">
  <a href="#" data-toggle="collapse" data-target=".navbar-collapse">Link</a>
</li>
<li class="hidden-xs">
  <a href="#">Link</a>
</li>

基本上,有两个版本的链接,一个在显示菜单切换时出现(浏览器宽度<768px),它会切换导航栏菜单,另一个不折叠它(浏览器宽度>768px)。如果您不添加第二种类型,当菜单不存在时尝试切换菜单时,它将显示一个奇怪的幻影动画水平滚动条。

于 2013-12-07T22:25:38.817 回答
2

我是 Bootstrap 的新手,但对上面的代码做了一点改动,现在它工作得很好。请记住,当您单击徽标时,下拉菜单也应该关闭,这就是我添加 navbar-header 的原因!

jQuery(document).ready(function () {
        jQuery(".nav a, .navbar-header a").click(function(event) {
                // check if window is small enough so dropdown is created
               jQuery(".navbar-collapse").removeClass("in").addClass("collapse");
        });
});
于 2014-07-09T23:18:01.750 回答
2

使用 Bootstrap 3.3.4,我意识到我的旧方法不再工作了。将其更新为:

if ($('div.navbar-collapse').hasClass('in')) {
    $('button.navbar-toggle:visible').click();
}
于 2015-04-29T15:46:12.410 回答
0

如果需要在 bootstrap 4 上解决此问题,请尝试此 jquery 片段。它以这种方式工作:如果导航栏被展开,什么也不会发生(正常的引导行为)。如果导航栏被折叠,在点击事件之后,关闭导航栏。适用于引导程序 4

  $(".navbar a").click(function(event) {
      // check if window is small enough so dropdown is created
      var toggle = $(".navbar-toggler").is(":visible");
      if (toggle) {
          $(".navbar-collapse").collapse('hide');
      }
  });
于 2020-06-12T12:52:56.757 回答