2

我已經使用一個變量中的數組創建了一組標記。我想爲每個標記添加一個「click」事件偵聽器,該標記鏈接到爲數組中的每個項目指定的url。下面的功能完美的作品,除了它在陣列中分配的最後一個URL來的所有標記的(而不是分配的第一個URL的第一標誌,第二個網址的第二個標誌等​​)。其餘數據被適當分配。我知道解決方案涉及循環中的閉包,但我無法弄清楚如何正確地創建它。任何幫助將非常感激。在Google Maps v3中使用一個變量將事件監聽器附加到一組標記 - 循環,關閉

var tours = [ 

['Title 1', 35.22024012078826, -80.81088066101074, 'tour/1'], 
['Title 2', 35.20376057077245, -80.84718704223633, 'tour/2'] 

]; 


setTourMarkers(map, tours); 


function setTourMarkers(map, locations) { 


var tourImage = new google.maps.MarkerImage('http://www.tours.com/images/camera-icon.png', 
    new google.maps.Size(27, 22), 
    new google.maps.Point(0,0), 
    new google.maps.Point(14, 11)); 


var tourShape = { 
    coord: [1, 1, 1, 27, 27, 22, 22 , 1], 
    type: 'poly' 
}; 


for (var i = 0; i < locations.length; i++) { 
    var tour = locations[i]; 
    var tourLatLng = new google.maps.LatLng(tour[1], tour[2]); 
    var marker = new google.maps.Marker({ 
    position: tourLatLng, 
    map: map, 
    icon: tourImage, 
    shape: tourShape, 
    title: tour[0] 

    }); //End new google.maps.Marker 

    google.maps.event.addListener(marker, 'click', function() { 
    window.location.href = "http://www.tours.com/" + tour[3]; 

    }); //End google.maps.event.addListener 

}; // End "for" statement *************** 


}; // End setTourMarkers function 
+1

你應該移動你的問題的部分「理解了它」來回答,並接受它。這樣,其他人可以看到這是一個回答問題。 –

回答

1

Origianlly由原始的海報貼,但他們納入其作爲他們的問題的一部分。這裏移動到它所屬的答案:

想通了......改變事件監聽器:

google.maps.event.addListener(marker, 'click', (function(tour) { 
return function(){ 
    window.location.href = "http://www.tours.com/" + tour[3]; 
    } 

})(tour)); //End google.maps.event.addListener 
+0

有人知道爲什麼這有效嗎? – clifgray

相關問題