Bootstrap 3 隐藏下拉菜单上的菜单项点击

问题描述 投票:15回答:6

看看这个小提琴. 我有一个基本的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();
});

有没有更好的解决方法?

jquery twitter-bootstrap drop-down-menu responsive-design uinavigationbar
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>

对于导航条来说,只有在移动视图模式下,当有一个切换按钮时,它才会真正发挥作用。当导航条暴露时,奇怪的事情就会发生(切换按钮不显示)。


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.netfw7vh4


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)。如果你不添加第二种类型,当试图切换菜单时,当它不在那里时,它将显示一个奇怪的幻影动画水平滚动条。


2
投票

我是Bootstrap的新手,但只要对上面的代码稍作修改,现在就能很好地工作了。记住,当你点击logo时,下拉菜单也应该关闭,这就是为什么我给它添加了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");
        });
});

2
投票

随着Bootstrap 3.3.4,我意识到我的老方法退出工作。 更新为。

if ($('div.navbar-collapse').hasClass('in')) {
    $('button.navbar-toggle:visible').click();
}

0
投票

如果需要在Bootstrap 4上解决这个问题,可以试试这个jquery代码段。它的工作方式是这样的。如果导航条展开,什么都不会发生(正常的bootstrap行为)。如果导航条是折叠的,在点击事件后,关闭导航条。适用于bootstrap 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');
      }
  });
© www.soinside.com 2019 - 2024. All rights reserved.