谷歌地图多个标记点击事件

时间:2013-04-05 13:15:13

标签: javascript google-maps google-maps-markers

我循环并放置一些标记,但是当我点击一个标记时,它们都会以相同的值响应

这是我的代码

  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总是具有相同的值

我在这里查看了其他答案,但这并没有解决我的问题。

1 个答案:

答案 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/