javascript - 如何在单击时使用 Javascript 折叠部分?
问题描述
我知道这个问题已被多次询问,并且我尝试了不同的方法,但这些方法不起作用。
我想要做的就是在单击按钮时折叠一个部分,但是我必须在它实际折叠之前单击按钮两次(In CollapseGrid被打印两次,然后它转到In Collapse)。
我们如何让它一次运行而无需单击两次?
function collapseGrid(element) {
console.log("In CollapseGrid");
element.addEventListener("click", collapse);
};
function collapse() {
console.log("In Collapse");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
}
<button class="info" onClick="collapseGrid(this)">CLICK</button>
<div class="contnet">
<p>This should be collapsed.</p>
</div>
解决方案
这是一种使用相当通用的功能和一些数据属性来实现它的简单方法。
var elements = document.querySelectorAll('[data-toggle="collapse"]');
elements.forEach(element => element.addEventListener('click', collapse));
function collapse() {
var target = this.getAttribute('data-target');
var element = document.getElementById(target);
element.style.display = element.style.display == "none" ? "block" : "none";
}
<div>
<button class="info" data-toggle="collapse" data-target="collapse1">CLICK 1</button>
<div class="content" id="collapse1">
<p>This should be collapsed.</p>
</div>
</div>
<div>
<button class="info" data-toggle="collapse" data-target="collapse2">CLICK 2</button>
<div class="content" id="collapse2">
<p>This should be collapsed.</p>
</div>
</div>
推荐阅读
- javascript - 如何在以下代码段中从另一个类导入的自定义 JSX 标记中换行:
- xaml - 如何在 App.xaml 静态资源中使用嵌套字符串...?
- html - 新的基于 Chromium 的 Edge 的垂直高度是否比 Chrome 短?标题一半在 Edge 中消失了,但 Chrome 可以吗?
- java - MyClass 类型的 getMethod() 的类型是 String,这与描述符的返回类型不兼容:U
- php - php7.3 或 apache2.4 是否可以记录每个文件更改/创建,以便轻松发现网站漏洞?
- java - Spring JPA-我得到错误,即使我已经坚持了对象也没有坚持
- android - 如何在 Room DB 中处理多个数据库版本
- multithreading - 有没有办法在 Rust 中生成具有指定生命周期的线程?
- c# - C# uwp 应用程序未在发布模式下构建
- list - 球拍/方案 - 用非平面列表中的另一个元素替换项目