我已经提出了以下代码。问题是在更改时,每个元素都会警告最后一个迭代索引。例如,如果元素数组上有24个项目,则更改中的每个元素都将警告“已更改第23行”。我有点看到它为什么会发生,但无法找到解决它,以便每个元素onchange将提醒其索引而不是最后一个。任何帮助将不胜感激。
for (var i = 1; i < elements.length; i++) {
elements[i].onchange = (ev: Event) => alert("Changed row " + i);
usersTable.appendChild(elements[i]);
}
答案 0 :(得分:2)
使用Array.prototype.forEach
,您可以将索引传递给回调函数...
elements.forEach((element, idx) => {
elem.onchange = (ev: Event) => alert("Changed row " + idx);
usersTable.appendChild(elem);
});
可以找到有关Array.prototype.forEach的文档here
答案 1 :(得分:2)
执行事件时,for循环将完成。那时$-
将等于循环结束时的任何内容 - i
(这就是为什么它总是等于23)。
您可以使用Brocco的解决方案解决此问题,但由于您想知道在不更改循环的情况下执行此操作的方法,因此在设置更改时需要传入elements.length - 1
的值功能。这可以通过使用IIFE:
i
这是表达for (var i = 1; i < elements.length; i++) {
(function (i) {
usersTable.appendChild(elements[i]);
elements[i].onchange = (ev: Event) => alert("Changed row " + i);
})(i);
}
函数为您做什么的更长方式。
或者,您也可以使用.bind
:
.forEach