javascript - Javascript – 动态创建的元素上的事件委托不起作用
问题描述
对不起,另一个重复。
我正在尝试将单击事件侦听器绑定到稍后将动态创建的链接。不幸的是,这不起作用:
document.querySelector('body').addEventListener('click', function(e) {
if (e.target.tagName.toLowerCase() === 'a') {
e.preventDefault();
console.log("click")
}
});
奇怪的是,它也不适用于不是动态创建的链接。然而,它正在研究body
,但这不是目标。
我也试过if (e.target.classList.contains("someclass")) {}
DOM 节点是body->header->div->a
如果这有所作为。(?)
感谢您提供有关如何使其工作的任何建议!
解决方案
使用 时target
,有时目标不是预期的元素。
例如看这段代码:动态生成<a>
的有内部<span>
元素。
单击target
将是span
。
为了解决这个小问题,我们可以使用.closest()
选择器,在这两种情况下,跨度或无跨度:
document.querySelector('body').addEventListener('click', function(e) {
if (e.target.closest('a')) { // All oyu need
e.preventDefault();
console.log("click")
}
});
setTimeout(() => {
document.querySelector("#links").insertAdjacentHTML("beforeend", `
<a href="#"><span>One</span></a>
<a href="#"><span>Two</span></a>
`);
}, 1000);
<header><div id="links"></div></header>
推荐阅读
- flask - 烧瓶动态主机路径
- android - 如何在 Ionic 中为 Android 和 iOS 设置不同的样式
- python - 在python中以二进制格式读取任何文件(图像,mp3,或视频,或文本)
- dynamics-crm - 将帐户分配给其他用户
- image-processing - 多通道 EXR 文件
- matlab - 使用单位矩阵和图像的朴素反卷积(无噪声)
- c++ - SendInput() 鼠标移动计算?
- sql - “ORDER BY”表达式中的列别名?
- django - 记录一个 django 项目(django 2 + drf + drf-access-policy)
- javascript - d3.geo.mercator 显示在 Chrome 中右移