【发布时间】:2020-05-11 11:01:01
【问题描述】:
我正在编写一段代码,通过单击相应按钮来切换某些 UL 项目的可见性,方法是切换 UL 上将不透明度/高度更改为 0 的类(这样我也可以应用过渡)。当第一个元素切换为不可见时,第二个元素不起作用。 onclick 事件未注册。
当按钮和 h3 的样式未设置为出现在同一行时,该代码有效,当我尝试使用 flex、float 或 inline 将两个元素并排放置时,该代码会中断。有没有一种方法可以用来定位它们并且仍然保留完整的功能?
const buttons = document.getElementsByClassName("toggle");
const lists = document.getElementsByClassName("list");
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener('click', function() {
toggle(i);
})
};
function toggle(i) {
if (lists[i].classList.contains("hide")) {
lists[i].classList.remove("hide");
} else {
lists[i].classList.add("hide");
}
}
<div id="sidebar">
<div class="side">
<div class="header">
<h3>Protein</h3>
<button class="toggle"></button>
</div>
<div>
<ul class="list">
<li class="fi">Beef</li>
<li class="fi">Fish</li>
<li class="fi">Lamb</li>
<li class="fi">Pork</li>
<li class="fi">Poultry</li>
<li class="fi">Shellfish</li>
<li class="fi">Vegetarian</li>
</ul>
</div>
</div>
<div class="side">
<div class="header">
<h3>Cuisine</h3>
<button class="toggle"></button>
</div>
<ul class="list">
<li class="fi">African</li>
<li class="fi">American</li>
<li class="fi">Asian</li>
<li class="fi">British</li>
<li class="fi">Cajun Creole</li>
<li class="fi">Carribean</li>
<li class="fi">Eastern European</li>
<li class="fi">Show More</li>
</ul>
</div>
</div>
<style>
.header{
display: flex;
align-items: center;
}
.hide {
height: 0;
opacity: 0;
margin: 0;
}
</style>
【问题讨论】:
-
代码看起来很合理。您能否将 HTML 编辑到实时堆栈片段中的问题中,以便我们也能看到问题?
-
刚刚添加,感谢反馈!
-
有趣...它的工作方式就像我希望它作为 sn-p 一样。我将尝试在没有额外 CSS 的情况下进行重建,或者查看环境是否存在差异。感谢您提供 Stack Overflow 提示!
-
sn-p 工作得很好。
-
您是否有理由必须使用不透明度进行隐藏?它正在干扰并覆盖第二个列表。
标签: javascript html dom-events nodelist