javascript - 为什么我必须单击两次才能使此 JavaScript 函数起作用?
问题描述
为了使功能将显示更改为“隐藏”然后返回“阻止”,每次需要单击 2 次。为什么是这样?如何将其减少到只需单击一下?
function showOfferMessage() {
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
}
<div class="offer-row collapsible" id="'.$oid.'" onclick="showOfferMessage()">
<div class="offer-info-item">
<div class="offcatreview-title">
<h3>Cat. Rating</h3>
</div>
<div class="offer-cat-rating">
</div>
</div>
</div>
<div class="content">
<p>'.$message.'</p>
</div>
解决方案
那是因为您在每次点击时都注册了一个事件监听器!因此,每次单击时,您的侦听器都会再次执行一次。
您的代码已修复:
function showOfferMessage(element) {
element.classList.toggle("active");
var content = element.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
}
<div class="offer-row collapsible" id="'.$oid.'" onclick="showOfferMessage(this)">
<div class="offer-info-item">
<div class="offcatreview-title">
<h3>Cat. Rating</h3>
</div>
<div class="offer-cat-rating">
</div>
</div>
</div>
<div class="content" style="display: block">
<p>'.$message.'</p>
</div>
推荐阅读
- r - 可视化 bife 包中的 APE(又名 AME)
- vb.net - 准确复制 Certutil.exe 的 -decodehex 输出
- ios - 如何使用 UICollectionViewCompositionalLayout 获取水平滚动百分比?
- raster - 通过纬度/经度访问 EUMETSAT 栅格?
- node.js - MongoDB NodeJS 错误:assert.equal(3, result.result.n) 不起作用。给出错误“无法读取未定义的属性'n'”
- node.js - 在 node.js 中使用 get 和 post 方法进行路由而不使用 express
- git - 为什么我不能从 master 创建一个 Git 分支?
- c++ - wcsrtombs_s 中可能存在的错误
- asp.net - 从指向文件服务器的虚拟目录读取文件
- oracle - 如何使用动态操作:PL/SQL 语句更新 oracle apex 中的当前行