我正在循环一个对象并尝试为对应于对象中每个项目的每个按钮添加一个onclick
事件。
for id of obj
button = $("#my_button"+ id)
button.click(-> console.log id)
通过此循环, 每个 按钮都会记录循环的 最后 ID。如何让每个按钮记录正确的相应ID?
答案 0 :(得分:9)
这是一个经典的JavaScript问题。标准解决方案是将每个循环迭代包装在一个匿名函数中,并将id
传递给该函数;这样,您传递给click
的函数将会看到该特定id
实例。
CoffeeScript为此提供了一个很好的语法:do (id) -> ...
编译为(function(id){ ... })(id)
。所以,对于你的例子,你要写
for id of obj
do (id) ->
button = $("#my_button"+ id)
button.click(-> console.log id)
我在文章A CoffeeScript Intervention中谈到do
。