首页 > 解决方案 > 单击菜单项时移动菜单不会折叠

问题描述

我遇到了一个模板问题,当单击菜单项时移动菜单不会折叠。试图解决它添加额外的类,额外的 ID,但仍然存在。它仅在再次单击汉堡包图标时关闭/隐藏。而且这特别烦人...

导航栏 html 代码是:

<!-- Fixed navbar -->
    <div class="navbar navbar-smak navbar-fixed-top" id="navbar" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><i class="fa fa-bars"></i></a>
                <h1><a class="navbar-brand animate" href="#home">TEST SITE</a></h1>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-right animate">
                    <li><a class="btn-navbar" href="#home">Home</a></li>
                    <li><a href="#blog">Blog</a></li>
                    <li><a href="#contact">Contacto</a></li>
                </ul>
            </div>
            <!--/.nav-collapse -->
        </div>
    </div>

这是我正在处理的虚拟 html 文件,请随时下载并检查:https ://aleare.com.ar/testing3/index2tst.html

这是处理折叠菜单的函数:

$('a[href*=#]').each(function () {
    if (filterPath(location.pathname) == filterPath(this.pathname) && location.hostname == this.hostname && this.hash.replace(/#/, '')) {
        var $targetId = $(this.hash),
            $targetAnchor = $('[name=' + this.hash.slice(1) + ']');
        var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false;

        if ($target) {

            $(this).click(function () {

                //Hack collapse top navigation after clicking
                topMenu.parent().attr('style', 'height:0px').removeClass('in'); //Close navigation
                $('.navbar .btn-navbar').addClass('collapsed');

                var targetOffset = $target.offset().top - 52;
                $('html, body').animate({
                    scrollTop: targetOffset
                }, 800);
                return false;
            });
        }
    }
});

有人知道它为什么失败吗?

标签: javascriptjqueryresponsive

解决方案


你必须有更多的标记,例如topMenu 和filterPath。

但是,如果我正确理解您的问题,听起来您希望在您从移动菜单中选择一个项目时关闭移动菜单。我没有使用您的代码,而是从 Bootstrap 示例中借用了一个导航栏,并添加了一些额外的代码,以便在您单击菜单中的链接时关闭菜单。如果引导程序中内置了类似的东西,我不会感到惊讶,我假设你正在使用它?如果没有,您可以通过在“适当”时触发对汉堡包的点击来做类似的事情:

$('.nav-link:not(.dropdown-toggle), .dropdown-item').each(function () {

		$(this).on("click", function(e) {
    	$(".navbar-toggler").trigger("click");
      alert($(this).attr("href"));
    	
    });
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha256-YLGeXaapI0/5IgZopewRJcFXomhRMlYYjugPLSyNjTY=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css" integrity="sha256-UzFD2WYH2U1dQpKDjjZK72VtPeWP50NoJjd26rnAdUI=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha256-CjSoeELFOcH0/uxWu6mC/Vlrc1AARqbm/jiiImDGV3s=" crossorigin="anonymous"></script>


<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#home">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#link">Link</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
          <a class="dropdown-item" href="#action">Action</a>
          <a class="dropdown-item" href="#another">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#soemthingelse">Something else here</a>
        </div>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

<div class="col">
  2 of 3
</div>
<div class="col">
  3 of 3
</div>


推荐阅读