【问题标题】:How can I close my bootstrap 4 navbar collapse menu when clicking outside the menu?在菜单外单击时如何关闭我的 bootstrap 4 导航栏折叠菜单?
【发布时间】:2018-03-25 23:56:45
【问题描述】:

对于所有浏览器尺寸,此导航栏都是折叠的。我想知道在菜单外单击时如何关闭展开的菜单。所以切换按钮不是关闭它的唯一方法。

我尝试了一些针对 Bootstrap 3 的建议,其中之一是下面包含的 Javascript 代码,但它们似乎不起作用。

说我不太了解 Javascript 或 PHP 可能很有用,但我愿意接受您的任何建议。谢谢!

<nav class="navbar navbar-inverse bg-faded">
              <button class="navbar-toggler navbar-toggler-left" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
              </button>
              <span class="navbar-text">&nbsp;</span>
              <div class="collapse navbar-collapse" id="navbarNavDropdown">
                <ul class="navbar-nav flex-column">
                  <li class="nav-item active">
                    <a class="nav-link" href="http://touruapp.com/">Home <span class="sr-only">(current)</span></a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="http://touruapp.com/about-us-2/">About Us</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="http://touruapp.com/contact-2/">Contact</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="http://touruapp.com/support-2/">Support</a>
                  </li>
                  <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                      Legal
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                      <a class="dropdown-item" href="http://touruapp.com/terms-2/">Terms</a>
                      <a class="dropdown-item" href="http://touruapp.com/privacy-2/">Privacy</a>
                    </div>
                  </li>
                </ul>
              </div>
            </nav>

            <script>
            $(document).click(function (event) {
                var clickover = $(event.target);
                var $navbar = $(".navbar-collapse");               
                var _opened = $navbar.hasClass("in");
                if (_opened === true && !clickover.hasClass("navbar-toggle")) {      
                    $navbar.collapse('hide');
                }
            });
            </script>

【问题讨论】:

    标签: twitter-bootstrap navbar bootstrap-4 twitter-bootstrap-4


    【解决方案1】:

    如果你使用的是 Bootstrap 4,试试这个 JQuery

    而不是隐藏应用点击切换器$(".navbar-toggler").click(); 并将in 替换为show 类,将navbar-toggle 替换为navbar-toggler

     $(document).ready(function () {
         $(document).click(function (event) {
             var clickover = $(event.target);
             var _opened = $(".navbar-collapse").hasClass("show");
             if (_opened === true && !clickover.hasClass("navbar-toggler")) {
                 $(".navbar-toggler").click();
             }
         });
     });
    

    工作小提琴:https://jsfiddle.net/rg43fyhL/

    $(document).ready(function () {
        $(document).click(function (event) {
            var clickover = $(event.target);
            var _opened = $(".navbar-collapse").hasClass("show");
            if (_opened === true && !clickover.hasClass("navbar-toggler")) {
                $(".navbar-toggler").click();
            }
        });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
    <nav class="navbar navbar-inverse bg-faded">
                  <button class="navbar-toggler navbar-toggler-left" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <span class="navbar-text">&nbsp;</span>
                  <div class="collapse navbar-collapse" id="navbarNavDropdown">
                    <ul class="navbar-nav flex-column">
                      <li class="nav-item active">
                        <a class="nav-link" href="http://touruapp.com/">Home <span class="sr-only">(current)</span></a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="http://touruapp.com/about-us-2/">About Us</a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="http://touruapp.com/contact-2/">Contact</a>
                      </li>
                      <li class="nav-item">
                        <a class="nav-link" href="http://touruapp.com/support-2/">Support</a>
                      </li>
                      <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                          Legal
                        </a>
                        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                          <a class="dropdown-item" href="http://touruapp.com/terms-2/">Terms</a>
                          <a class="dropdown-item" href="http://touruapp.com/privacy-2/">Privacy</a>
                        </div>
                      </li>
                    </ul>
                  </div>
                </nav>

    【讨论】:

    • 嗯似乎对我不起作用,但这可能是我包含脚本的方式。我已将 Javascript 包装在
    • 如上添加你的css和js并测试
    • 奇怪,因为它在小提琴中工作,但不在网站上。已尝试缓存和刷新。这必须是我如何包含javascript。现在它位于结束 标记下方的
    • 感谢您的发帖。这个选项对我很有效。
    • 这允许单击 .collapse 中的“开放空间”并仍然将其关闭,这毫无意义..
    【解决方案2】:

    以下 jQuery 代码对我来说很好用:

    // Close Navbar when clicked outside
    $(window).on('click', function(event){
        // element over which click was made
        var clickOver = $(event.target)
        if ($('.navbar .navbar-toggler').attr('aria-expanded') == 'true' && clickOver.closest('.navbar').length === 0) {
            // Click on navbar toggler button
            $('button[aria-expanded="true"]').click();
        }
    });
    

    说明:

    如果 navbar-toggler 按钮的aria-expanded 属性为false,即navbar 已折叠,则无需执行任何操作。

    如果 navbar-toggler 按钮的aria-expanded 属性是true,那么在关闭导航栏之前,我们必须检查点击是在导航栏上还是在导航栏外进行,这可以通过检查是否有任何祖先来轻松验证click-target 是否包含navbar 类。

    如果点击目标元素(点击的元素)的任何祖先包含navbar 类,则clickOver.closest('.navbar').length 将返回1,否则将返回0。

    因此,如果导航栏切换按钮的aria-expanded 属性为true(导航栏未折叠)并且clickOver.closest('.navbar').length 返回0(点击目标元素没有navbar 类的祖先),则折叠通过单击导航栏切换按钮来导航栏,否则什么都不做。

    【讨论】:

    • 最佳答案,这个。
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 2018-05-11
    • 2015-12-03
    • 1970-01-01
    • 2017-08-29
    • 2015-10-29
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多