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

原生HTML+JS手风琴下拉菜单仅首个可展开问题求助

手风琴菜单问题排查与修复

核心问题点

  • 你使用的document.querySelector('.accordion_box li ul')仅会匹配文档中第一个符合规则的元素,因此无论点击哪个菜单标题,永远只会操作第一个菜单的下拉列表,这是导致其余菜单无法正常展开的核心原因。
  • 代码逻辑和CSS规则存在冲突:你CSS中同时定义了.drop_list控制隐藏、.accordion_box li.active ul控制显示两种逻辑,但JS仅切换drop_list类,逻辑没有对齐。
  • 循环变量使用var声明存在变量提升的遗留问题,属于不规范写法,容易引发其他边界错误。

修复方案

方案1:匹配CSS原有active逻辑(推荐,方便实现手风琴互斥效果)

调整JS代码如下,无需修改现有CSS:

const headings = document.querySelectorAll(".drop_title");

headings.forEach(heading => {
  heading.addEventListener("click", function() {
    // 定位当前点击标题的父级li容器
    const currentLi = this.parentElement;
    // 切换父级的active类,匹配CSS的显示规则
    currentLi.classList.toggle('active');

    // 如果需要点击当前菜单时自动关闭其他已展开菜单,可取消注释下方代码
    // headings.forEach(otherHeading => {
    //   const otherLi = otherHeading.parentElement;
    //   if (otherLi !== currentLi) otherLi.classList.remove('active');
    // })
  })
})

方案2:直接操作下拉列表类(无需修改逻辑匹配规则)

如果你希望保留原JS的drop_list切换逻辑,调整代码如下即可:

const headings = document.querySelectorAll(".drop_title");

headings.forEach(heading => {
  heading.addEventListener("click", function() {
    // 定位当前点击标题紧邻的下拉列表元素
    const currentList = this.nextElementSibling;
    currentList.classList.toggle('drop_list');
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:05