【问题标题】:Bootstrap: nav-link does not get hidden when dropdown-item is selectedBootstrap:选择下拉项目时导航链接不会隐藏
【发布时间】:2020-04-20 04:08:27
【问题描述】:

以下是我想要实现的 - 当导航栏中的下拉项目被选中时,完成以下 2 个操作中的 BOTH

  • 转到具有目标 id 的 div
  • 将导航栏卷起至初始状态(将其隐藏回完全卷起的状态)

事实证明,我只能做一个或另一个,但不能同时做。有人可以帮助提供有关我如何实现这两点的指导吗?我相信第一个下拉项目锚应该这样做,但是由于某种原因,它在滚动导航栏后不会转到 targetId。仅当我删除第二个锚点显示的 data-toggle="collapse"data-target=".navbar-collapse.show" 时,锚点才会将我带到目标,但导航栏不会卷起。

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

<nav class="navbar navbar-dark bg-dark fixed-top">
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

  <div class="collapse navbar-collapse" id="navbarsExampleDefault">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</a>
        <div class="dropdown-menu shadow rounded" aria-labelledby="dropdown01">
          <a class="dropdown-item" href="#targetId" data-toggle="collapse" data-target=".navbar-collapse.show">nav-link does get hidden, but it doesn't hit the target</a>
          <a class="dropdown-item" href="#targetId">Hits the target, but the nav-link does not get hidden</a>
        </div>
      </li>
    </ul>
  </div>
</nav>
<!-- navbar ends here -->
<div id="targetId">Content</div>

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

非常感谢您的帮助,非常感谢!

【问题讨论】:

    标签: javascript html css twitter-bootstrap bootstrap-4


    【解决方案1】:

    您可以为此使用Javascript

    document.querySelectorAll('.custom_collapse').forEach(cur => {
      cur.addEventListener('click', () => {
        document.querySelector('.navbar_collapse').classList.remove('show');
      });
    });
    #targetId {
        /* JUST FOR SEE TARGET */
        margin-top: 120vh;
    }
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    
    <nav class="navbar navbar-dark bg-dark fixed-top">
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>
    
      <div class="collapse navbar-collapse navbar_collapse" id="navbarsExampleDefault">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</a>
            <div class="dropdown-menu shadow rounded" aria-labelledby="dropdown01">
              <a class="dropdown-item custom_collapse" href="#targetId">nav-link does get hidden, but it doesn't hit the target</a>
              <a class="dropdown-item custom_collapse" href="#targetId">Hits the target, but the nav-link does not get hidden</a>
            </div>
          </li>
        </ul>
      </div>
    </nav>
    <!-- navbar ends here -->
    <div id="targetId">Content</div>
    
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

    【讨论】:

    • 谢谢尼沙格!虽然代码 sn-p 在您包含的嵌入式窗口中按预期工作(这就是我将问题标记为已解决的原因),但当我将代码放入我的 html 文件并使用浏览器打开它时,javascript 片段似乎没有去工作。作为一种快速的测试方法,我在我的 html 文件头部的
    • 您可以测试您的 javascript 文件,方法是在其上添加console.log()。如果控制台日志有效,请检查事件监听器是否有效
    • 好的,我想通了 - 您列出的 javascript 函数必须放在正文的末尾,在所有 nvabar html 之后。我把它放在顶部,它在 html 被“看到”之前执行,这导致了空的 NodeList。换句话说,如果我们假设您的答案中的块被命名为 1,2 和 3,那么解决方案工作的正确顺序是:2、3、1。感谢您建议 console.log(),它帮助我找出问题所在。
    • 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多