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

纯JS手风琴菜单层级展开关闭异常问题求助

手风琴菜单二级展开问题修复方案

问题根源

点击二级submenu时,事件会向上冒泡触发一级menu的点击事件,导致所有菜单被关闭。

修复步骤及代码修改

  1. 阻止二级菜单事件冒泡
    在二级submenu的点击处理函数中添加event.stopPropagation(),避免触发一级菜单的关闭逻辑。

  2. 分离一、二级菜单的展开/关闭逻辑
    分别控制一级菜单的子菜单和二级菜单的链接列表,确保操作互不干扰:

// 处理一级菜单逻辑
document.querySelectorAll('.menu').forEach(menu => {
  menu.addEventListener('click', () => {
    // 关闭所有一级菜单的子菜单
    document.querySelectorAll('.menu .submenu-list').forEach(list => {
      list.style.display = 'none';
    });
    // 切换当前一级菜单的子菜单状态
    const targetSubmenu = menu.querySelector('.submenu-list');
    targetSubmenu.style.display = targetSubmenu.style.display === 'block' ? 'none' : 'block';
  });
});

// 处理二级菜单逻辑
document.querySelectorAll('.submenu').forEach(submenu => {
  submenu.addEventListener('click', (event) => {
    // 阻止事件冒泡到一级菜单
    event.stopPropagation();
    // 关闭所有二级菜单的链接列表
    document.querySelectorAll('.submenu .link-list').forEach(list => {
      list.style.display = 'none';
    });
    // 切换当前二级菜单的链接列表状态
    const targetLinks = submenu.querySelector('.link-list');
    targetLinks.style.display = targetLinks.style.display === 'block' ? 'none' : 'block';
  });
});

效果说明

  • 点击一级menu:仅展开当前menu的子菜单,自动关闭其他所有一级menu的展开项。
  • 点击二级submenu:仅展开当前submenu的链接列表,自动关闭其他所有二级submenu的展开项,且不会影响一级菜单的展开状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:45:22