如何适当地调整此变量的范围

时间:2012-09-08 07:34:44

标签: asp.net google-maps-api-3 for-loop scope event-listener

在我使用谷歌地图APIv3的应用程序中,我试图随机生成一些附有折线的标记。我做了以下事情:

//Loop to add locations and draw line
var path= polyline.getPath();
for(var i=0;i<route.length;i++)   //route is an array containing some latlng's
    {
        var marker= new google.maps.Marker({position:route[i],map:map});
        path.push(route[i]);
    }

//Event Listener's
google.maps.event.addListener(marker,'click',function(event)
    {
        iwindow.setContent("<b>Coordinates are:</b><br/>Latitude:"+event.latLng.lat()+"<br/>Longitude:"+event.latLng.lng()); 
          //iwindow is the InfoWindow variable
        iwindow.open(map,marker); 
    });  

这里的问题是点击标记始终具有for循环中最后一个标记的标记参考。因此,只有最终标记显示infowindow。

如何更改代码,以便每次标记点击都会生成InfoWindow?

1 个答案:

答案 0 :(得分:1)

每个标记的回调是相同的,因此可以在循环范围之外定义它。但是需要将一个单独的侦听器附加到每个标记,因此将该代码放在循环中。

function showPopup(event) {
    iwindow.setContent("<b>Coordinates are:</b><br/>Latitude:"+event.latLng.lat()+"<br/>Longitude:"+event.latLng.lng()); 
    iwindow.open(map,marker); 
});  

for(var i=0;i<route.length;i++) {
    var marker= new google.maps.Marker({position:route[i],map:map});
    path.push(route[i]);
    google.maps.event.addListener(marker,'click',showPopup);
}