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

如何实现三级嵌套菜单点击时的逐层独立开关功能?

三级嵌套菜单独立开关修复方案

现有三级嵌套结构菜单,使用jQuery实现逐层展开,但存在以下问题:

  • 一级菜单展开正常
  • 点击二级菜单时,一级菜单会自动关闭
  • 再次点击一级菜单,二级菜单仍处于展开状态

问题原因

事件冒泡机制导致。点击二级菜单的li.menu-item-has-children时,事件会向上冒泡到父级的一级li.menu-item-has-children,触发其slideToggle方法,进而导致一级菜单关闭。


解决方案1:阻止事件冒泡

修改JS代码,在点击事件中添加event.stopPropagation(),阻止事件向上传递到父元素:

$(".menu-item-has-children").click(function(event) {
  event.preventDefault();
  // 阻止事件冒泡到父级元素
  event.stopPropagation();
  $(this).children(".sub-menu").slideToggle();
});

解决方案2:绑定事件到菜单<a>标签(更推荐)

将点击事件绑定从li.menu-item-has-children改为其内部的<a>标签,既符合用户点击文字展开菜单的交互习惯,也从根源避免事件冒泡问题:

$(".menu-item-has-children > a").click(function(event) {
  event.preventDefault();
  // 找到当前链接对应的子菜单并切换显示状态
  $(this).next(".sub-menu").slideToggle();
});

对应的HTML结构保持不变(确保子菜单sub-menu是<a>标签的下一个兄弟元素):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<li class="menu-item-has-children">
  <a>About</a>
  <ul class="sub-menu">
    <li>
      <a>Subitem1</a>
    </li>
    <li class="menu-item-has-children">
      <a>Subitem2</a>
      <ul class="sub-menu">
        <li></li>
        <li></li>
        <li></li>
      </ul>
    </li>
    <li>
      <a>Subitem3</a>
    </li>
  </ul>
</li>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:45:42