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.namej

ありがとう。

4

1 に答える 1

5

重要: すべての JavaScript 開発者は、このことを知っておく必要があります。見つけるのが非常に難しい、あらゆる種類の奇妙なバグが発生します。

これは、JavaScript を初めて使用する人によくある間違いです。私は前に同じ間違いをしました。

ループ内の関数は、反復ごとに作成されるわけではありません。これは、同じクロージャ スコープを持つ同じ 1 つの関数オブジェクトです。したがって、セルにはまったく同じ 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 に答える