在Javascript中为for循环分配单击处理程序

时间:2012-01-16 14:21:45

标签: jquery html css html-table hover

任何人都可以告诉我为什么会这样:

$("#test1 td").click(function(event) {
  $("#test1").addClass("tableRowSelected");
});
$("#test2 td").click(function(event) {
  $("#test2").addClass("tableRowSelected");
});

但这不是:

for(var i = 1; i < 3; i++) {
  $("#test" + i + " td").click(function(event) {
    $("#test" + i).addClass("tableRowSelected");
  });
}

我也尝试在第二个代码段中使用i.toString(),但这没有帮助:(

3 个答案:

答案 0 :(得分:2)

事件处理函数接收{em>持久引用到i变量,而不是它创建时的副本。有关详细信息,请参阅this other answer

答案 1 :(得分:2)

如何使用:

$("table").on("click", "td", function() {
    $(this).parent().addClass("tableRowSelected");
});

这将使用事件委派将事件附加到表并按td

过滤单击事件

答案 2 :(得分:-1)

<强>更新

要使其发挥作用,请将$("#test" + i).addClass("tableRowSelected");更改为$(this).parents('tr').addClass("tableRowSelected");

正如Pointy指出的那样,实际上我确实存在值为4的无效。


这是因为,在第二种情况下,当事件实际被触发时,i不再存在。