【发布时间】:2021-07-24 20:55:19
【问题描述】:
我在删除以前的活动课程时遇到问题,我想用手风琴打开一个项目,但每当我打开下一个项目时,我都不想关闭前一个项目。我怎样才能做到这一点?
let accordion = document.querySelectorAll(".accordion-item")
let accordionText = document.querySelectorAll(".accordion-text")
accordion.forEach((item, i) => {
accordion[i].addEventListener("click", () => {
accordionText[i].classList.toggle("active")
})
})
.accordion-text {
display: none;
}
.active {
display: block;
}
<div class="accordion-item">
<div class="accordion-label">
Test
</div>
<div class="accordion-text">
<p>
orem ipsum – tekst składający się z łacińskich i quasi-łacińskich wyrazów, mający korzenie w klasycznej łacinie, wzorowany n
</p>
</div>
</div>
<div class="accordion-item">
<div class="accordion-label">
Test
</div>
<div class="accordion-text">
<p>
orem ipsum – tekst składający się z łacińskich i quasi-łacińskich wyrazów, mający korzenie w klasycznej łacinie, wzorowany n
</p>
</div>
</div>
<div class="accordion-item">
<div class="accordion-label">
Test
</div>
<div class="accordion-text">
<p>
orem ipsum – tekst składający się z łacińskich i quasi-łacińskich wyrazów, mający korzenie w klasycznej łacinie, wzorowany n
</p>
</div>
</div>
我尝试了类似的方法,但似乎不起作用。我收到此错误
"<a class='gotoLine' href='#83:31'>83:31</a> Uncaught TypeError: Cannot read property 'classList' of undefined"
accordion.forEach((item, i) => {
let previousItem = null;
accordionText[previousItem].classList.remove("active")
accordion[i].addEventListener("click", () => {
accordionText[i].classList.toggle("active")
previousItem = i
})
})
【问题讨论】:
-
let previousItem = null:这是你的问题。您基本上是在说accordionText[null],即undefined。此外,您的previousItem变量是本地变量,因此将i保存在其中并不能实现您的目标,因为它在每个循环中都会重新定义。此外,您的方法没有考虑下一个项目打开的情况。
标签: javascript