javascript - 当您选择另一个手风琴打开时如何确保手风琴关闭
问题描述
我很难弄清楚如何输入所需的代码以确保在单击另一个手风琴时会关闭活动的手风琴。
我已经看到其他显示有效解决方案的小提琴,但不知道如何将它放入我当前的代码中,尽管尝试了(我是 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";
}
}
}
解决方案
当单击手风琴并向其添加.active
类时,在此步骤之前,您应该检查其他手风琴是否.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 - 为什么回调必须是一个函数?
- sql - 如何在 ASP.Net 中更新 SQL?
- r - 一种将数据帧子集为多个数据帧的有效方法
- machine-learning - keras 模型中的 NaN 损失
- r - 如何插入列名,如案例
- azure - Azure 中国 Kubernetes 集群监控
- r - grepl 逐个元素地处理两个向量
- python - 使用 Python C 扩展时如何修复 'UnicodeDecodeError: 'utf-8' codec can't decode byte'?
- javascript - 修复与字段标签重叠的自动填充
- java - 在将消息推送到 SQS 时提供请求超时