javascript - Javascript,将EventListener添加到循环中动态创建的元素..为什么这不起作用?
问题描述
运行一个 for 循环来创建多个 ID 为 at1、at2、at3 等的 div。
function maketiles() {
for (i = 1; i < 7; i++) {
var div = document.createElement('div');
div.id = "at" + i;
$("tiles").appendChild(div);
}
}
然后我向每个 div 添加EventListener,以便可以单击它们以调用另一个函数并将唯一编号(与它们的 ID 相同的编号)传递给所述函数。
如果我像这样单独添加它们:
$("at1").addEventListener("click", function () { build(1) });
$("at2").addEventListener("click", function () { build(2) });
$("at3").addEventListener("click", function () { build(3) });
$("at4").addEventListener("click", function () { build(4) });
$("at5").addEventListener("click", function () { build(5) });
$("at6").addEventListener("click", function () { build(6) });
它工作正常。但是在循环中只添加一行会更有效,如下所示:
function maketiles() {
for (i = 1; i < 7; i++) {
var div = document.createElement('div');
div.id = "at" + i;
$("altartiles").appendChild(div);
$(div.id).addEventListener("click", function () { build(i) });
}
然而那是行不通的。似乎问题出在 i 变量上。它不会变成它包含的 1、2、3..。有什么办法可以使这项工作?
PS如果不清楚,我有
var $ = function (id) { return document.getElementById(id); };
设置,就像 jquery 一样。
解决方案
推荐阅读
- javascript - 动态显示替代文字
- java - 为什么在 Spring Boot 中没有替换验证消息?
- smtp - 配置 odoo 出入邮件
- javascript - 如何减少 docusaurus 构建 (v2) 的内存使用量?
- python - Python wrapper arround fasttext train 与参数调整
- git - 与不同的分支解绑
- javascript - 我想根据 Laravel Blade 中的用户 ID 显示模态弹出窗口并将数据传递给模态
- entity-framework - 如何使用 EF 3.1 为实体框架 GroupBy 中的每个组选择前 N 行
- r - 如何使用应用于多行的条件来选择个人?
- r - 直接在 ggplot aes 中闪亮的输入变量(RMarkdown flexdashboard)