1

我有以下for循环:

for (loc in locations){
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
    position: new google.maps.LatLng(newLoc[0], newLoc[1]),
        map: map,
        title: loc
    });
    google.maps.event.addListener(loc, 'click', function() {
        console.log(loc);
    });
};

当您单击它们时,我不认为会生成一堆地图标记和控制台。记录它们的名称(位置)。但他们都以控制台结束。记录位置日志中的最后一项。

我认为这是因为它们都被命名为相同的东西

为什么会这样,我该怎么办?

4

2 回答 2

4

如上所述,您需要关闭:

for (loc in locations){
  (function(loc){  
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
      position: new google.maps.LatLng(newLoc[0], newLoc[1]),
      map: map,
     title: loc
    });

    google.maps.event.addListener(loc, 'click', function() {
      console.log(loc);
    });
  })(loc);
};
于 2012-06-13T16:03:04.070 回答
0

您需要创建一个闭包。通过创建闭包,您可以在执行时有效地“烘焙”内部函数的状态,这与触发“click”处理程序的时间不同。

编辑:删除了糟糕的代码 - 使用上面 Nayjest 更清洁的解决方案!

于 2012-06-13T16:00:10.657 回答