0

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

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

1 回答 1

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

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

于 2012-02-20T23:55:19.630 回答