You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js+Bootstrap多级导航下拉问题:点击子项关闭父级下拉菜单

Vue+Bootstrap多级下拉菜单父级自动关闭问题解决办法

问题根源

Bootstrap默认下拉菜单的逻辑是:点击菜单内任何元素都会触发父级菜单关闭,这是因为事件冒泡会传递到父级dropdown组件,同时默认的data-bs-auto-close配置会在点击菜单内部时执行关闭操作。

具体修复步骤

1. 配置父级下拉的自动关闭规则

给一级下拉的<a>标签加上data-bs-auto-close="outside",设置只有点击菜单外部区域时才关闭父级下拉,内部操作不会触发关闭。

2. 阻止子级下拉触发器的事件冒泡

在二级下拉的触发器<a>标签上添加Vue的@click.stop指令,切断点击事件向上传递的路径,避免父级dropdown接收到事件后关闭。

3. 修正菜单布局避免子菜单被截断

给父级的dropdown-menu加上position-static类,确保子级下拉菜单能正常显示在父菜单外侧,不会被容器截断。

修改后的完整代码

<nav class="navbar navbar-expand-lg bg-body-tertiary">
  <div class="container-fluid">
    <div class="navbar-brand mb-0 h1">กำหนดมาตรฐานบุคลากรทั่วไป</div>
  </div>

  <button
    class="navbar-toggler"
    type="button"
    data-bs-toggle="collapse"
    data-bs-target="#navbarNav"
    aria-controls="navbarNav"
    aria-expanded="false"
    aria-label="Toggle navigation"
  >
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarNav">
    <ul class="navbar-nav">
      <li class="nav-item">
        <router-link to="/home" class="nav-link">Home</router-link>
      </li>

      <!-- 一级下拉菜单 -->
      <li class="nav-item dropdown">
        <a
          class="nav-link dropdown-toggle"
          href="#"
          id="navbarDropdown"
          role="button"
          data-bs-toggle="dropdown"
          data-bs-auto-close="outside"
          aria-haspopup="true"
          aria-expanded="false"
        >
          Services
        </a>
        <div class="dropdown-menu position-static" aria-labelledby="navbarDropdown">
          <router-link to="/service1" class="dropdown-item">Service 1</router-link>
          <router-link to="/service2" class="dropdown-item">Service 2</router-link>

          <!-- 二级下拉菜单 -->
          <li class="nav-item dropdown">
            <a
              class="dropdown-item dropdown-toggle"
              href="#"
              id="nestedDropdown"
              role="button"
              data-bs-toggle="dropdown"
              @click.stop
              aria-haspopup="true"
              aria-expanded="false"
            >
              More Services
            </a>
            <div class="dropdown-menu" aria-labelledby="nestedDropdown">
              <router-link to="/service3" class="dropdown-item">Service 3</router-link>
              <router-link to="/service4" class="dropdown-item">Service 4</router-link>
            </div>
          </li>
        </div>
      </li>
    </ul>
  </div>
</nav>

内容的提问来源于stack exchange,提问作者nongtan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:43:14