2013-01-15 21 views
0

可能重複:
Event handlers inside a Javascript loop - need a closure?分配在一個循環的onclick函數在JavaScript中不起作用

我有的HREF表格單元格。
我通過'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"; 
    } 

不起作用

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); 
    }; 
    } 

出了什麼問題?

回答

7
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); 
    } 

上面的代碼應該工作。在你的情況下,它不起作用,因爲你有關閉i定義for (var i = 0基本上,i你通過deleteRows指向i定義在for這在那一刻將等於tbl.rows.length我的代碼創建新的閉環循環的每個循環。欲瞭解更多信息穀歌JavaScript關閉。

+0

謝謝!這工作 – HoGo