谷歌地图API2 addListener

时间:2011-07-06 06:30:57

标签: google-maps-api-2

我已将所有标记存储在制造商数组中,当我点击标记时,我想从数组中检索索引。但是这不会返回正确的索引,而是返回最大索引。有什么建议吗?

for(var i = 0; i<options.length; i++){
marker[i] = new GMarker(new GLatLng(options[i].latitude, options[i].longitude), markerIcon);
//addListener(i, options[i].name);
GEvent.addListener(marker[i],"click", function(e) {
alert(i);
});
map.addOverlay(marker[i]);
}

1 个答案:

答案 0 :(得分:1)

问题是变量i没有像你期望的那样在闭包中被捕获。因此,所有侦听器都捕获相同的i(最终增加到options.length)。您需要将标记/侦听器创建包装在自己的函数中。

var makeNewMarker = function(i) {
  var marker = new GMarker(
      new GLatLng(options[i].latitude, options[i].longitude),
      markerIcon);
  GEvent.addListener(marker[i],"click", function(e) {
    alert(i);
  });
};
for (var i = 0; i < options.length; ++i) {
  marker[i] = makeNewMarker(i);
  map.addOverlay(marker[i]);
}

你可以在for循环中使makeNewMarker函数成为匿名函数,但这种方式似乎更具可读性。