哈希错误上的Javascript迭代

哈希错误上的Javascript迭代,javascript,html,ruby-on-rails,hash,Javascript,Html,Ruby On Rails,Hash,我在迭代哈希时出错,但我不确定错误 在控制器中,我有一个散列,传递给Gon,如下所示: @images = { "titleA" => "12345678" "titleB" => "123456789" "titleC" => "1234567890" } gon.images = @images <% @images.each do |image, key| %> <div id="<%= "#{image}" %

我在迭代哈希时出错,但我不确定错误

在控制器中,我有一个散列,传递给Gon,如下所示:

@images = {
   "titleA" => "12345678"
   "titleB" => "123456789"
   "titleC" => "1234567890"
}
gon.images = @images     
<% @images.each do |image, key| %>
   <div id="<%= "#{image}" %>">
在视图主体中,我基于图像标题创建了一系列div id,如下所示:

@images = {
   "titleA" => "12345678"
   "titleB" => "123456789"
   "titleC" => "1234567890"
}
gon.images = @images     
<% @images.each do |image, key| %>
   <div id="<%= "#{image}" %>">
我现在遇到的问题是,每当我点击任何一个div,不管它在ruby视图中的ID是“titleA”还是“titleB”或“titleC”,唯一被称为“12345678”的photoset。我的循环可能搞错了,但有人能帮忙吗

谢谢


注意:flickr和所有东西的代码都基于预先存在的函数,除了只返回一个键的photoset之外,所有东西都可以正常工作

因为JavaScript只有函数作用域(而不是块作用域),所以您必须将函数包装在一个新函数(闭包)中,永久捕获对
image
的引用:

for (var image in gon.images) {
    document.getElementById(image).onclick = (function(image) {
      return function() {
        // flickr:"set"+gon.images[image]
      }
    })(image);
}
每个匿名函数内的
image
变量绑定到函数外的同一变量。因此,在执行
click
功能时,由于循环将全部完成,
image
的值是循环中计算的最后一个值

归结起来就是:单击函数中的
image
值是在函数执行时绑定的,而不是在函数创建时绑定的。