在循环中分配onclick函数在JavaScript中不起作用

HoG*_*oGo 0 javascript for-loop function onclick

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

我在表格单元格中有hrefs.
我正在使用'for'循环迭代这些单元格以更改onclick函数.
但这不起作用.
这里有两个例子:

有效:

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";
  }
Run Code Online (Sandbox Code Playgroud)

不起作用:

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);
    };
  }
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

Vik*_* S. 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);
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码应该有效.在你的情况下,它不起作用,因为你有一个基本i定义的闭包for (var i = 0,i你传递deleteRowsi定义的点for,在那一刻将等于tbl.rows.length我的代码为每个循环循环创建新的闭包.有关google javascript关闭的更多信息.