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

JavaScript toggle类功能失效:存在remove操作时点击当前元素无法关闭

问题根因

你的代码执行逻辑顺序错误:
每次触发点击事件时,你会先统一移除所有box的active类,此时你点击的目标box就算之前处于激活状态,也已经被清空了active类。后续调用toggle方法时,只会触发「添加active类」的逻辑,永远不会执行移除操作,所以点击同一个已激活的box无法收起内容。

修复代码

只需要先记录当前点击box的激活状态,再做全局移除,最后根据提前记录的状态判断是否要激活当前元素即可:

let faqs = document.querySelectorAll(".allsector .box");

faqs.forEach((faq) => {
    faq.addEventListener("click", function (e) {
        // 先记录当前点击的box是否已经处于激活状态
        const isCurrentActive = faq.classList.contains("active");
        // 全局移除所有active类
        faqs.forEach((ele) => {
            ele.classList.remove("active");
        });
        // 如果之前没激活,现在就加上;如果之前已经激活,现在已经移除了就不用再加,实现收起效果
        if (!isCurrentActive) {
            faq.classList.add("active");
        }
    });
});

修改后可以完全满足你的需求:

  • 点击未激活的box:自动关闭其他已激活box,展开当前box内容
  • 点击已激活的box:直接收起当前box内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:05