谷歌地图多个标记clickevent

Gru*_*mpy 2 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);
  });      
}
Run Code Online (Sandbox Code Playgroud)

函数show_details,a总是具有相同的值

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

Kov*_*vge 10

异步编程/脚本编写中的典型问题.该a变量传递,当点击事件运行,因此,那价值是什么,是在后for循环结束.您应该创建一个内部函数作用域,并将值保存a在变量中,该变量仅存在于该作用域中.解决方案:

 (function(z){
    google.maps.event.addListener(marker, "click", function() {
       show_details(z);
    });    
 })(a);
Run Code Online (Sandbox Code Playgroud)

a变量生活在回调函数之外了.因此,如果您修改a(或for循环修改那个)的值,并且在调用事件处理程序时,它会看到修改后的a.

帮助链接:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/.