如何在循环中设置onclick属性

时间:2015-03-19 01:17:49

标签: javascript html dom

我正在第一列中构建一个带有文本的表,而在第二列中构建了一些东西。这是完整的.js文件:

var table = document.createElement("table");
var tableBody = document.createElement("tbody");

for(i = 0; i < array.length; i++) {

var row = table.insertRow(i);
var cell = row.insertCell(0);
cell.innerHTML = text[i];

var cell = row.insertCell(1);
var cellElement = document.createElement("input");
cellElement.setAttribute("id", ID[i]);  
cellElement.setAttribute("type", "button");
cellElement.setAttribute("value", "button");

/////cellElement.onclick =
     /////function(){ doThisThing(i,ID[i]); } );

cell.appendChild(cellElement);
row.appendChild(cell);

}

table.appendChild(tableBody);

document.body.appendChild(table);

除了cellEllement.onclick = function(){}之外,一切都有效; onlick()函数未设置。我尝试过这方面的变种:

cellElement.setAttribute("onclick",doThisThing(i,ID[i]));

如何在循环创建表时设置按钮onclick属性?

1 个答案:

答案 0 :(得分:0)

您正在使用对函数内部i变量的引用,该变量将随着循环继续变化,并且在您通过该变量时不会保留i的值循环的迭代。你需要保持i的当前值,可能是将你的回调包装在另一个函数中:

cellElement.onclick = (function(currI) {
   return function() { doThisThing(currI, ID[currI]); };
})(i);

你也可以使用bind来简化事情:

cellElement.onclick = doThisThing.bind(null, i, ID[i]);