javascript - 我在使用 JavaScript 的手风琴时遇到问题
问题描述
我的手风琴有问题。
问题:一切正常,但我有一个问题。
当我发现超过1 个 closeIt类时,我正在使用 click eventListener 来清理所有 Accordions 触发器 *(按钮)*。
问题是,如果我不关闭活动的 Accordion,它将不会添加活动类,因为它会清除所有内容。
function showAcord(n) {
var $bro = "magic-" + n,
$par = document.getElementById($bro);
var $j = document.getElementsByClassName('acord-active'),
i = $j.length;
while (i--) {
$j[i].classList.remove("acord-active");
}
$par.classList.toggle("acord-active");
// Close It Condição
var $myClass = document.getElementsByClassName('closeIt');
var $selector = "btn-" + n,
$btn = document.getElementById($selector);
if ($btn.classList.contains("closeIt")) {
var $j = document.getElementsByClassName('acord-active'),
i = $j.length;
while (i--) {
$j[i].classList.remove("acord-active");
}
var $checkIcons = document.getElementsByClassName('closeIt'),
y = $checkIcons.length;
while (y--) {
$checkIcons[y].classList.remove("closeIt");
}
} else {
$btn.classList.toggle("closeIt");
}
}
// EventListener
(function() {
window.addEventListener('click', clean);
function clean() {
var $cleaner = document.getElementsByClassName('closeIt');
var $loop = $cleaner.length;
if ($loop > 1) {
while ($loop--) {
$cleaner[$loop].classList.remove("closeIt");
}
}
}
})()
.openIt:before {
content: "\f078";
font-family: fontawesome;
margin-right: 5px;
color: #fff;
font-size: 20px;
}
.closeIt:before {
content: "\f077";
font-family: fontawesome;
margin-right: 5px;
font-size: 20px;
color: #f6a61d;
}
.acord-off {
z-index: -1;
transform: scaleY(0);
position: absolute !important;
}
.acord-active {
z-index: 1;
transform: scaleY(1);
position: inherit !important;
}
<div class="container">
<article>
<div class="col-sm-12 pt-3 mb-5 aligncenter">
<h2>Ibbca Accordeon</h2>
<div class="container">
<div class="row">
<div class="col-sm-6">
<a class="btn btn-info openIt" name="button" onclick="showAcord(1)" id="btn-1">Mostrar acord 1</a>
</div>
<div class="col-sm-6">
<a class="btn btn-info openIt" name="button" onclick="showAcord(2)" id="btn-2">Mostrar acord 2</a>
</div>
</div>
</div>
<div id="magic-1" class="acord-1 acord-off">
<p>Texto II</p>
</div>
<div id="magic-2" class="acord-2 acord-off">
<p>Texto III</p>
</div>
</div>
</article>
</div>
解决方案
clean
嘿,请注意事件传播,您每次单击时都将函数附加到窗口。如果单击 btn,此事件将冒泡到窗口并运行clean
。您可以像这样避免这种情况:
如果你添加onclick="showAcord(event, 1)
接着
function showAcord(event, n) {
event.stopPropagation();
...
这样可以避免在btn
单击a 时进行清理
推荐阅读
- postgresql - 运行 docker postrgessql image 两次先退出
- javascript - 页面上的多个倒数计时器
- api - 如何在 Jmeter 请求中处理方括号 []
- java - 如何在 java 中将 POI 工作簿添加为 json 元素
- javascript - 在找到的示例代码中,Array.prototype.find 的箭头函数回调中令人惊讶的语法是什么?
- sql - 联合嵌套选择中的排序依据
- configuration - 配置 SonarQube (Node.JS) 以从内部服务器下载二进制文件
- powershell - Powershell 按值传递复杂对象,而不是按引用
- elixir - Elixir - 动态设置 stripity_stripe 库的请求标头
- ios - 在自定义对象类型的核心数据中保存带有子项的类别