我循环并放置一些标记,但是当我点击一个标记时,它们都会以相同的值响应
这是我的代码
for(a=0; a < prod.length; a++){
// we add marker to map
var myLatlng = new google.maps.LatLng(prod[a]['lat'],prod[a]['lon']);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: prod[a]['name']+" \n"+prod[a]['description'],
icon: image
});
google.maps.event.addListener(marker, "click", function() {
show_details(a);
});
}
function show_details,a总是具有相同的值
我在这里查看了其他答案,但这并没有解决我的问题。
答案 0 :(得分:10)
异步编程/脚本编写中的典型问题。当click事件运行时,a
变量传递,因此,该值的值是for
循环结束后的值。
您应该创建一个内部函数作用域,并将a
的值保存在变量中,该变量仅存在于该作用域中。
解决方案:
(function(z){
google.maps.event.addListener(marker, "click", function() {
show_details(z);
});
})(a);
a
变量也存在于回调函数之外。因此,如果您修改a
(或for
循环修改那个)的值,并且在调用事件处理程序时,它会看到修改后的a
。
帮助链接:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/。