在 Javascript 的 for 循环中分配点击处理程序

Posted

技术标签:

【中文标题】在 Javascript 的 for 循环中分配点击处理程序【英文标题】:Assign click handler in for loop in Javascript 【发布时间】:2012-02-11 11:17:48 【问题描述】:

谁能告诉我为什么会这样:

$("#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");
  );

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

【问题讨论】:

Assign click handlers in for loop 的可能重复项 抱歉 - 我没看到,不过我认为这个答案对我有好处。 【参考方案1】:

更新

要让它工作,请将$("#test" + i).addClass("tableRowSelected"); 更改为$(this).parents('tr').addClass("tableRowSelected");

正如 Pointy 指出的,实际上 i 确实存在,其值为 4,这是无效的。


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

【讨论】:

@Pointy - +1 是的,弄错了!实际上 i 确实存在,其值为 4,这是无效的【参考方案2】:

事件处理函数接收到i 变量的持久引用,而不是它创建时的副本。详情请见this other answer。

【讨论】:

一旦某个天才将聪明才智融入流行的 IDE 向人们解释这一点,这个地方就会变得有点寂寞。 您建议的***.com/questions/4091765/… 的答案做到了,谢谢。 @ing0:很好。我想我会在某个时候为这个答案添加一个解释,目前还很缺乏,但这个标题似乎应该经常出现在搜索中。 我检查了几个答案,但没有看到那个。我想我愚蠢地认为这是不那么常见的事情。再次感谢。【参考方案3】:

如何使用:

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

这将使用事件委托将事件附加到表格并通过 td 过滤点击事件

【讨论】:

以上是关于在 Javascript 的 for 循环中分配点击处理程序的主要内容,如果未能解决你的问题,请参考以下文章

在 for 循环的每个循环中分配标签

c++ 在 for 循环中的 vector<char> 中的 for 循环中的内存分配

在 for 循环中声明的逗号运算符

在 for 循环中分配点击处理程序

在for循环中分配代表的问题[重复]

从 for 循环 matlab 内部生成的变量分配向量值