我有以下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);
});
};
当你点击它们时,我不想生成一堆map-markers和console.log它们的名字(loc)。但是他们最终都在控制台。记录位置日志中的最后一项。
我认为这是因为它们都被命名为相同的东西
为什么会这样,我该怎么办呢?
答案 0 :(得分: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);
};
答案 1 :(得分:0)
您需要创建closure。通过创建一个闭包,你可以在执行时有效地'烘焙'内部函数的状态,这与触发'click'处理程序的时间不同。
编辑:删除了可怕的代码 - 使用Nayjest上面更清晰的解决方案!