2013-05-04 73 views
0
for (var i=0; i<Gmaps.map.markers.length; i++) { 
    google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', function(object){ 
    alert(Gmaps.map.markers[i]); 
    }); 
}; 

所以,這經歷了循環。顯然,我正在使用google map API。地圖上的每個標記都附帶了警報。雖然該警報顯示undefined。如果我將它切換到alert(Gmaps.map.markers[0]);或任何其他適用的編號,它將顯示我的對象對象,因爲它應該。如果我打電話給alert(Gmaps.map.markers[i].id);或類似的東西,我會得到我正在尋找的價值,但顯然,每個標記都會給出相同的警報。簡單的JavaScript for循環不行爲,我認爲它應該

爲什麼在回調中不能識別i

回答

1

你必須私有化我:

for (var i=0; i<Gmaps.map.markers.length; i++) { 
(function(i){ 
    google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', function(object){ 
    alert(Gmaps.map.markers[i]); 
    }); 
}(i)); 
}; 
+0

的作品。哇。我並不聲稱自己是這方面的專家,但是我在這個行業做了大約一年的時間,並且私有化概念從未出現過。奇。謝謝! – Dudo 2013-05-04 18:46:25

+0

循環沒有範圍,但功能。我幾乎總是使用.map而不是如果我可以。與「Gmaps.map.markers.map(功能(馬克,我){」,「Gmaps.map.markers [我]」變成「標記」,「我」是自動和私人。 – dandavis 2013-05-04 18:57:16