2013-05-04 42 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