我试图以嵌入在链接中的打开/关闭切换控件为目标,当您点击它时也可以切换手风琴。两者都可以工作,但是我希望它们彼此独立地工作。开/关开关不应切换手风琴。我正在使用Ratchet作为框架,如果有什么用的话。 Here's my JS Fiddle
<li class="table-view-cell toggle-handle accordion">
Kitchen Light
<div class="toggle">
<div class="toggle-handle"></div>
</div>
<!-- toggle -->
</li>
<div class="panel">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui, officiis asperiores totam. Amet, beatae explicabo placeat consequatur repellendus quia rerum saepe cumque autem facilis! Perferendis, exercitationem eius vitae alias ad.</p>
</div>
li.accordion {
curser: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: 0.4s;
}
li.accordion.active,
button.accordion:hover {
background-color: #ddd;
}
li.accordian:after {
content: '\002B';
color: #777;
font-weight: bold;
float: right;
margin-left: 5px;
}
div.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
div.toggle {
z-index: 1;
}
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].onclick = function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + 'px';
}
}
} //end function
最佳答案
您缺少的关键是event.stopPropagation();因为这样可以防止拨动开关也触发手风琴。
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].getElementsByClassName("toggle")[0].onclick = function() {
event.stopPropagation();
this.classList.toggle("active");
}
acc[i].onclick = function() {
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + 'px';
}
}
} //end function
li.accordion {
/* change the button tag to li tag */
curser: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: 0.4s;
}
li.accordion.active,
button.accordion:hover {
background-color: #ddd;
}
li.accordian:after {
content: '\002B';
color: #777;
font-weight: bold;
float: right;
margin-left: 5px;
}
div.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
div.toggle {
z-index: 1;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/ratchet/2.0.2/css/ratchet.css" rel="stylesheet"/>
<li class="table-view-cell toggle-handle accordion">
Kitchen Light
<div class="toggle">
<div class="toggle-handle"></div>
</div>
<!-- toggle -->
</li>
<div class="panel">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui, officiis asperiores totam. Amet, beatae explicabo placeat consequatur repellendus quia rerum saepe cumque autem facilis! Perferendis, exercitationem eius vitae alias ad.</p>
</div>
<!-- end panel -->