TypeScript:为循环中元素数组中的每个元素分配一个事件

时间:2015-05-08 14:51:44

标签: html web typescript webpage

我已经提出了以下代码。问题是在更改时,每个元素都会警告最后一个迭代索引。例如,如果元素数组上有24个项目,则更改中的每个元素都将警告“已更改第23行”。我有点看到它为什么会发生,但无法找到解决它,以便每个元素onchange将提醒其索引而不是最后一个。任何帮助将不胜感激。

for (var i = 1; i < elements.length; i++) {
        elements[i].onchange = (ev: Event) => alert("Changed row " + i);
        usersTable.appendChild(elements[i]);
    }

2 个答案:

答案 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