jQuery Bootstrap 3 在菜单项上隐藏下拉菜单单击

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18153745/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 21:08:03  来源:igfitidea点击:

Bootstrap 3 Hide Dropdown Menu on Menu Item Click

jquerytwitter-bootstrapdrop-down-menuresponsive-designuinavigationbar

提问by dougmacklin

Check out the fiddle. I have a basic Bootstrap 3 responsive nav like so:

检查小提琴。我有一个基本的 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>

The nav items link to sections on the page, rather than different pages so I need the dropdown to hide on click.

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

Whenever I try to toggle the dropdown manually with jQuery, it messes up future functionality of the dropdown toggle button:

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

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

Is there a better fix for this?

有没有更好的解决方法?

回答by Charly

If you wanted to do this without JavaScript you could simply add the data-target and data-toggle to each list item, like so:

如果你想在没有 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>

For the navbar, this really only works in the mobile view mode when there is a toggle button. Strange things happen when the navbar is exposed (the toggle button isn't showing).

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

回答by Gloria

Change this:

改变这个:

$(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();
    });
  });

to this:

对此:

$(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");
    });
});

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

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

回答by bhall

I don't know why clicking/tapping on a menu item in a menu dropdown in a collapsed navbar doesn't automatically toggle the menu in Bootstrap. There may be a more graceful way to do this, but, here's how I fixed it (using Bootstrap 3.0.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>

Basically, there are two versions of the link, one that appears whenever the menu toggle is shown (at browser widths <768px) that will toggle the navbar menu, and one that doesn't collapse it (browser widths >768px). If you don't add that second type, it will show a strange phantom animated horizontal scroll bar when trying to toggle the menu when it is not there.

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

回答by RMattos

I am new to Bootstrap but with a small changed to the above code it works beautifully now. Remember that when you click on the logo the drop-down menu should close too, that is why I have added navbar-header to it!

我是 Bootstrap 的新手,但对上面的代码做了一些小改动,现在它可以很好地工作了。请记住,当您单击徽标时,下拉菜单也应关闭,这就是我向其中添加导航栏标题的原因!

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");
        });
});

回答by Mark

With Bootstrap 3.3.4 I realized my old way quit working. Updated it to:

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

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