2011-07-06 67 views
0

我已經將所有標記存儲在製作者數組中,並且當我點擊標記時,我想從數組中檢索索引。但是,這並不會返回正確的索引,而是返回最大索引。任何建議?谷歌地圖API2 addListener

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

的問題是,該變量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循環,但這種方式似乎更具可讀性。

+0

謝謝,戴夫!保存了我的一天。 –