2

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

这是我的代码

  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);
  });      
}

函数 show_details,a 始终具有相同的值

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

4

1 回答 1

10

异步编程/脚本中的典型问题。当点击事件运行时传递的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/ 。

于 2013-04-05T13:17:03.663 回答