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

如何在打开新下拉菜单时关闭已打开的下拉菜单

解决筛选菜单互斥展开问题

当前代码的问题是,点击每个筛选块时只会单独切换自身的下拉状态,不会自动关闭其他已打开的下拉菜单。只需修改JavaScript逻辑,实现点击某一菜单时先关闭所有其他菜单,再切换当前菜单状态即可。

修改后的JavaScript代码

const burgerBtn = document.querySelector(".header__burger"),
  menu = document.querySelector(".menu"),
  body = document.querySelector(".body"),
  filter = document.querySelector(".filter"),
  blockFilter = document.querySelectorAll(".block-filter"),
  dropdown = document.querySelectorAll(".block-filter__dropdown");

if (filter) {
  blockFilter.forEach(item => {
    item.addEventListener("click", event => {
      // 关闭所有其他筛选块的下拉菜单和激活状态
      blockFilter.forEach(otherItem => {
        if (otherItem !== item) {
          otherItem.querySelector(".block-filter__dropdown").classList.remove("block-filter__dropdown_state_active");
          otherItem.querySelector(".block-filter__icon").classList.remove("block-filter__icon_state_active");
        }
      });

      // 切换当前筛选块的状态
      item.querySelector(".block-filter__dropdown").classList.toggle("block-filter__dropdown_state_active");
      item.querySelector(".block-filter__icon").classList.toggle("block-filter__icon_state_active");

      // 选择菜单项时更新显示值
      if (event.target.classList.contains("block-filter__item")) {
        item.querySelector(".block-filter__value").textContent = event.target.textContent;
      }
    })
  })
}

关键逻辑说明

  • 点击任意筛选块时,先遍历所有筛选块,排除当前点击的块,移除其他块的激活类,确保其他菜单关闭。
  • 再对当前点击的块执行toggle操作,切换其下拉菜单的显示/隐藏状态。
  • 原有更新选中值的逻辑保持不变。

不需要修改HTML结构

你的现有HTML结构已经满足需求,无需调整:

<div class="filter hero__filter">
  <form class="filter__form">
    <div class="filter__block block-filter">
      <div class="block-filter__button">
        <div class="block-filter__header">
          <span class="block-filter__type">Purpose</span>
          <div class="block-filter__icon"></div>
        </div>
        <span class="block-filter__value">Buy</span>
      </div>
      <div class="block-filter__dropdown">
        <span class="block-filter__item">Buy</span>
        <span class="block-filter__item">Sell</span>
      </div>
    </div>
    <!-- 其他筛选块结构类似即可 -->
  </form>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:50:36