一年前在大学课堂上学习了一些基础知识后,我才刚刚开始自学 Javascript。对于我应该编写的网络应用程序,我需要允许用户“选择”表格的行,最好是通过单击它们。我有很强的 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[rows.length - 1],它始终是最后一行;也就是说,i 的值不会“保存”为事件侦听器回调的参数。如何使用自己保存的参数调用事件侦听器?该线程似乎提供了一种使用 onclick 属性执行此操作的方法,但我知道这已被弃用,并且 addEventListener (或一些与 IE 兼容的怪物 addEvent 库)现在是“正确”的方法。