1年前に大学のクラスでいくつかの基本を学んだ後、Javascriptを独学で学び始めたところです。私が書くことになっているWebアプリの場合、できればクリックして、ユーザーがテーブルの行を「選択」できるようにする必要があります。私には強力な Python のバックグラウンドがあり、私のアプローチはおそらく GTK パラダイムの悪臭を放っています。もっと標準的な方法や受け入れられている方法があるのに、これをやろうとすることで、どういうわけか「車輪の再発明」をしているのではないかとしつこく恐れていますが、私が言ったように、Javascript はまだあまり知りません。これを試すための私のJavascriptコードは次のとおりです。
//Get list of rows in the table
var table = document.getElementById("toppings");
var rows = table.getElementsByTagName("tr");
var selectedRow;
//Row callback; reset the previously selected row and select the new one
function SelectRow(row) {
if (selectedRow !== undefined) {
selectedRow.style.background = "#d8da3d";
}
selectedRow = row;
selectedRow.style.background = "white";
}
//Attach this callback to all rows
for (var i = 0; i < rows.length; i++) {
var idx = i;
rows[idx].addEventListener("click", function(){SelectRow(rows[idx])});
}
ループが終了した後、idx は rows.length - 1 に等しいため、これは明らかに機能しません。したがって、SelectRow の行引数は、常に最後の行である [rows.length - 1] になります。つまり、i の値は、イベント リスナー コールバックへの引数として「保存」されません。独自の保存された引数を使用してイベント リスナーを呼び出すにはどうすればよいですか? このスレッドは、onclick プロパティを使用してこれを行う方法を提供しているようですが、これは非推奨であり、addEventListener (または巨大な IE 互換の addEvent ライブラリ) が「正しい」方法であることを理解しています。