javascript - 使用事件侦听器时如何访问父容器上的属性?
问题描述
我已将事件侦听器附加到容器元素。我已经向容器元素添加了一个数据属性,并在我单击容器时消除了数据属性,所以效果很好。我可以看到,当我单击容器内的任何子项时,它也会触发事件侦听器,但是我无法获取数据属性。单击孩子时如何获取容器的数据属性的任何想法?
在此处查看实际操作:https ://js-addeventlistener-demo.stackblitz.io
HTML:
<div class="group">
<div class="container" data-letter="A">
<h2>A</h2>
<span>Subtitle</span>
</div>
<div class="container" data-letter="B">
<h2>B</h2>
<span>Subtitle</span>
</div>
<div class="container" data-letter="C">
<h2>C</h2>
<span>Subtitle</span>
</div>
</div>
JavaScript:
const containers = document.querySelectorAll('div.container');
containers.forEach(container => {
container.addEventListener('click', e => {
console.dir(e.target);
console.log('The dataset letter for the container element is', e.target.dataset.letter);
});
});
解决方案
由于事件冒泡,您将获得来自容器的所有点击以及子元素的任何事件。
target
event 属性是指触发事件的元素,而不是容器本身(期望直接单击容器)。
您应该使用currentTarget
event 属性,该属性指的是附加了侦听器的元素。
containers.forEach(container => {
container.addEventListener('click', e => {
console.log(
'The dataset letter for the container element is',
e.currentTarget.dataset.letter
);
});
});
推荐阅读
- android - 无法解决:com.firbaseui:firebase-ui-database:3.2.2
- json - Laravel 中的自定义 JSON 响应结构
- angular - 使用 angular 以相同的方法返回 observable 和 set 值
- maven - 如何在gradle中写项目信息?
- python - 将字符列表转换为带有字符串的列表
- python - 显示没有 tqdm 的多处理脚本的状态
- aws-lambda - 存在 serverless.yml 文件时,无服务器配置凭据不起作用
- python - 查找二进制数中第一个和最后一个 1 的索引
- c++ - 将单个字符串分成单独的变量c ++
- ios - 无法为饼图设置自定义颜色