我正在第一列中构建一个带有文本的表,而在第二列中构建了一些东西。这是完整的.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属性?
答案 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]);