0

可能重复:
Javascript 循环中的事件处理程序 - 需要闭包吗?

我在表格单元格中有href 。
我正在使用“for”循环遍历这些单元格以更改 onclick 函数。
但这不起作用。
这里有 2 个例子:

有效

for (var i = 0; i < tbl.rows.length - 1; i++) { // for each row
    var len = document.getElementById("my_table").rows[i].cells.length-1;
    document.getElementById("my_table").rows[i].cells[len].innerHTML = "X1";
  }

不起作用

for (var i = 0; i < tbl.rows.length; i++) { // for each row
    var len = document.getElementById("my_table").rows[i].cells.length-1;
    document.getElementById("my_table").rows[i].cells[len].onclick = function() {
        deleteRows(i);
    };
  }

有什么问题?

4

1 回答 1

8
for (var i = 0; i < tbl.rows.length; i++) { // for each row
    var len = document.getElementById("my_table").rows[i].cells.length-1;
    document.getElementById("my_table").rows[i].cells[len].onclick = (function(index) { return function() {
        deleteRows(index);
    };})(i);
  }

上面的代码应该可以工作。在您的情况下,它不起作用,因为您在 Basic 中i定义了一个闭包for (var i = 0i您将其传递给定义的deleteRows点,此时将等于我的代码为每个循环循环创建新的闭包。欲了解更多信息谷歌 javascript 关闭。ifortbl.rows.length

于 2013-01-15T17:10:41.990 回答