javascript - 当单击父元素时似乎正在拾取它的子元素
问题描述
我正在尝试使用 Vanilla JavaScript 制作手风琴,但是如果手风琴的标题中有一个子 div 元素似乎不起作用,我不知道为什么。但是,如果没有子 div 元素,则手风琴可以正常工作。
var coll = document.getElementsByClassName("m40__grid__item");
coll[i].addEventListener("click", function (evnt) {
let target = evnt.target;
if ( !target.matches('.m40__grid__item') ) {
target = target.closest('.m40__grid__item');
}
const currClassList = target.classList;
if (currClassList.contains("active")) {
evnt.target.classList.remove("active");
var content = evnt.target.nextElementSibling;
content.style.maxHeight = null;
} else {
for (var j = 0; j < coll.length; j++) {
coll[j].classList.remove("active");
coll[j].nextElementSibling.style.maxHeight = null;
}
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
}
});
}
<div class="m40__grid">
<div class="m40__grid__item">
<div class="test">
This header doesn't work
</div>
</div>
<div class="m40__grid__item--full-width">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<div class="m40__grid__item">Click me!</div>
<div class="m40__grid__item--full-width">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
</div>
我的问题的代码笔是https://codepen.io/mrsalami/pen/WNrBboR?editors=1111
解决方案
我相信evnt.target可以是div.test,所以你需要像这样标准化目标
var target = event.target;
if (!target.matches('.m40__grid__item')) {
target = target.closest('.m40__grid__item');
}
在该操作之后,您应该使用目标。
推荐阅读
- javascript - 返回下一个特定日期
- css - Dart Sass 中的 @import 和 @use 有什么区别?
- kubernetes - Kubernetes 如何为附加卷的有状态应用程序提供 HA?
- docker - 如何从 wodby 在 localhost 中创建两个 Drupal 项目?
- arduino - Generating a smooth tone sweep with Arduino
- javascript - 在 Angular 2 中使用 gulp-s3 将资产上传到 digitalOcean 存储桶?
- javascript - JavaScript:无法将显示设置为无,因为它将自身设置为阻止
- vue.js - 加载已经在表单中注册的数据 - VueJS - Bootstrap-Vue
- c - 链表无法添加到列表中
- azure - 从 Azure 文件共享获取访问密钥 - Terraform