javascript - 当您选择打开另一个 Accordion 时如何确保 Accordion 关闭

标签 javascript jquery html css

我在尝试弄清楚如何输入所需的代码以确保事件的 Accordion 在单击另一个 Accordion 时会关闭时感到困惑。

我已经看到其他 fiddle 展示了可行的解决方案,但尽管尝试了但不知道如何将其融入我当前的代码(我是 Javascript 的新手)。

HTML:

<button class="syo-accordion"><h3>Sample Heading</h3></button>
     <div class="syo-panel"> <p>Some text example</p></div>

Javascript:

var acc = document.getElementsByClassName("syo-accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].onclick = function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    } 
  }
}

最佳答案

当单击 Accordion 并向其添加 .active 类时,在此步骤之前,您应该检查其他 Accordion 是否已经添加了 .active 类并且删除它。


var acc = document.getElementsByClassName("syo-accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].onclick = function() {

    for (const accordion of acc) { // looping through all of the accorion
        if (accordion.classList.contains("active")) {
            accordion.classList.remove("active"); // removing class if it contains the active class
        }
    }

    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    } 
  }
}

关于javascript - 当您选择打开另一个 Accordion 时如何确保 Accordion 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58789470/

相关文章:

javascript - block "Confirm Form Resubmission"

asp.net - 如何在查询字符串中传递 '#'

html - 限制 Bootstrap UI 的宽度

javascript - Angular 2 - 如何有选择地绑定(bind)包含 HTML 的字符串(一些允许的标签)

jquery - 在 jquery animate 中,如何使用自定义对象而不是 div?

javascript - 用 JavaScript 变量替换表单中的隐藏值

Android:字符编码原始资源文件

javascript - 脚本中存在的字符串的本地化

javascript - 选择中的 JQuery 多个属性

javascript - 即使在脚本之前包含 app.js 之后,jquery 也无法正常工作