javascript - Onclick 按钮仅在第一个列表中有效
问题描述
我想复制列表项及其所有子元素,这是我的示例代码。仅在第一个列表中,单击时有效,重复列表的按钮无效
document.querySelectorAll(".btnMe").forEach(el => {
el.addEventListener('click', () => {
var myDiv = document.querySelector(".list");
var divClone = myDiv.cloneNode(true);
document.querySelector('#lists').appendChild(divClone);
})
})
<ul id="lists">
<li class="list">
<p>Test</p>
<button class="btnMe">Click Me</button>
</li>
</ul>
解决方案
使用事件委托代替处理绑定事件。
var wrapper = document.querySelector("#lists")
wrapper.addEventListener('click', (evt) => {
var btnClicked = evt.target.closest("button.btnMe");
if (btnClicked) {
var myDiv = document.querySelector(".list");
var divClone = myDiv.cloneNode(true);
wrapper.appendChild(divClone);
}
})
<ul id="lists">
<li class="list">
<p>Test</p>
<button class="btnMe">Click Me</button>
</li>
</ul>
推荐阅读
- typescript - 在界面中为 firebase 函数/storgae/database 编写类型
- html - 复选框功能单击图像而不是复选框
- pip - lxml 无法使用 python 3.7 安装
- c++ - 在 gdb 中加载一个额外的共享库以注入调试帮助函数
- java - C# 与 Java 中的异常
- python - Python 安装在 Bash 中,但不在 Windows cmd 中
- java - 如何将 OpenCL 与 OpenJDK 集成?
- javascript - 如何在 highcharts 中添加跨越多个刻度的自定义内容
- python-3.x - 在 python 脚本中单击控制台时防止控制台标题更改
- php - Google API RefreshToken 不适用于 Google Drive