2

我试图让表格中的一个单元格在我单击它时告诉我它的编号。

for(var j = 0; j < 8; j++){
    var cell = row.insertCell(j);
    cell.name = j;
    cell.onclick=function(){alert(cell.name)};
}

但是,这会为每个单元格打印数字 8。如何保存jin的值cell.name,而不是让它指向变量j

谢谢。

4

1 回答 1

5

重要提示:所有 JavaScript 开发人员都应该知道这一点。它会导致各种很难找到的奇怪错误。

这是 JavaScript 新手的常见错误。我以前也犯过同样的错误。

循环内的函数不是为每次迭代创建的。它是具有相同闭包范围的同一个函数对象。因此,您的单元格将具有完全相同的 onclick 回调。

我的建议是永远不要在循环内创建函数。相反,创建并调用一个返回回调函数并将其分配给 onclick 的函数。

for (var j = 0; j < 8; j++) {
    var cell = row.insertCell(j);
    cell.name = j;
    cell.onclick = createOnClick(cell);
}

function createOnClick(cell) {
    return function () {
        // do whatever you want to do with cell
    };
}
于 2013-09-02T11:23:47.127 回答