2009-10-25 69 views
3

我有一個帶有多個標記的地圖,我通過一個數組填充了這個標記。每個標記都是可點擊的,並且應該將用戶帶到每個標記不同的網址。Google Maps API v3中的多個標記點擊鏈接到不同的頁面

問題是所有標記在顯示正確的標題時都使用數組中最後一個條目的url。

這裏是我的代碼:

var myOptions = { zoom: 9, center: new google.maps.LatLng(40.81940575,-73.95647955), mapTypeId: google.maps.MapTypeId.TERRAIN } 
var map = new google.maps.Map(document.getElementById("bigmap"), myOptions); 
setMarkers(map, properties); 

var properties = [ 
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'], 
['213 Bennett Avenue',40.8574384,-73.9333426,'Mjkz'], 
['50 Overlook Terrace',40.8543752,-73.9362542,'Mjky'], 
['850 West 176 Street',40.8476012,-73.9417571,'OTM='], 
['915 West End Avenue',40.8007478,-73.9692155,'Mjkx']]; 

function setMarkers(map, buildings) { 
    var image = new google.maps.MarkerImage('map_marker.png', new google.maps.Size(19,32), new google.maps.Point(0,0), new google.maps.Point(10,32)); 
    var shadow = new google.maps.MarkerImage('map_marker_shadow.png', new google.maps.Size(28,32), new google.maps.Point(0,0), new google.maps.Point(10,32)); 
    var bounds = new google.maps.LatLngBounds; 
    for (var i in buildings) { 
     var myLatLng = new google.maps.LatLng(buildings[i][1], buildings[i][2]); 
     bounds.extend(myLatLng); 
     var marker = new google.maps.Marker({ position: myLatLng, map: map, shadow: shadow, icon: image, title: buildings[i][0] }); 
     google.maps.event.addListener(marker, 'click', function() { window.location = ('detail?b=' + buildings[i][3]); }); 
    } 
    map.fitBounds(bounds); 
} 

使用此代碼,點擊任何標誌將用戶帶到

什麼我做錯了 '細節b = Mjkx?'?

回答

5

問題是您的點擊處理程序正在使用外部函數中的i變量。

執行一個循環不會在每次迭代中創建一個單獨的變量副本,因此您的回調函數對所有回調使用相同的值i

要修復它,編寫一個單獨的函數來生成回調。

例如:

function buildClickHandler(i) { 
    return function() { window.location = ('detail?b=' + buildings[i][3]); }; 
} 

for(var i = 0; i < buildings.length; i++) { 
    //... 
    google.maps.event.addListener(marker, 'click', buildClickHandler(i)); 
} 

(你需要定義buildClickHandlersetMarkers所以它可以使用buildings參數)

順便說一句,通過數組循環時,你shouldn't use a for in loop,因爲它也會遍歷數組對象上的任何其他成員。

相關問題