javascript - 在 Vanilla JS 中多次触发事件
问题描述
我有一个使用 Vanilla JS 的代码。我使用一个按钮添加了动态内容。但问题是当我点击一个动态生成的内容时,它会返回第一次点击:1 第二次点击:3 第三次点击:6 第四次点击:10
但它应该是 1, 2, 3, 4
HTML 代码如下:
<p>Add Content</p>
<div class="dynamic-content">
JS文件如下:
let counter = 1;
document.querySelector("p").addEventListener("click", function(){
document.querySelector(".dynamic-content").innerHTML += `
<span>My dynamic content - ${counter}</span>
`;
counter++;
});
document.querySelector("body").addEventListener("click", function(){
let contentList = document.querySelectorAll(".dynamic-content span");
if(contentList.length){
contentList.forEach(function(el){
el.addEventListener("click", function(event){
console.log(event.target.innerText);
});
});
}
});
注意:我们不能使用 jQuery
解决方案
let counter = 1;
document.querySelector("p").addEventListener("click", function(){
const element = document.createElement("span")
element.innerHTML += `My dynamic content - ${counter}`;
document.querySelector(".dynamic-content").appendChild(element)
element.addEventListener("click", function(){
console.log('element')
// here logic
})
counter++;
});
https://www.w3schools.com/jsref/met_document_createelement.asp
尝试使用document.createElement
,然后将事件添加到创建的元素中,在此解决方案中,您只会将一个事件添加到 HTML 标记中。
推荐阅读
- sql-server - Perl 脚本无法使用 ODBC 连接到 MS SQL:“连接字符串无效”
- model-view-controller - Kendo NumericTextBox 不接受 Unicode 数字(来自其他语言的数字)
- android - 在android studio中为图像添加自定义水印
- git - Azure Devops Server:如何设置构建管道以将 git 源作为任务而不是自动获取
- git - 是否必须将 .gitignore 文件包含到我的 git 存储库中?
- regex - 如何从记事本++中的正则表达式搜索中替换一个字符
- python - 在满足熊猫特定条件的行之间进行简单计算
- css - 如何给我的 SVG 图标冠上金色的线性渐变填充(路径)颜色?
- android - 谷歌地图没有出现在我的颤振应用程序中并且总是闪烁
- reactjs - Sequelize JOIN 查询在获取请求时抛出以下错误