0

我正在尝试添加从数据库中获取位置(纬度和经度)的标记数量,我可以将它们添加到地图中,但是

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});

方法仅将事件侦听器添加到最后一个标记(数据库中的最后一个城市)......

如何分别为每个标记添加Listner?

这是我的完整代码..

==================================================== ============================

 result contains List<City>

    function OnSuccess(result) {
                if (result) {
                    for (var i = 0; i < result.length; i++) {
                    alert(result[i].lat);
                       var myCenter= new google.maps.LatLng(result[i].lat,result[i].log);
                        var marker=new google.maps.Marker({
      position:myCenter});

    var infowindow = new google.maps.InfoWindow({
        content: result[i].desc
    });

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.open(map,marker);
    });
    marker.setMap(map);

                    }

               }
            }
4

1 回答 1

0

你需要一个闭包。您正在做的是为每个标记重新定义单击处理程序函数。单击时,所有标记都将执行此行:

infowindow.open(map,marker);

使用当时的“infowindow”、“map”和“marker”的值。并且因为标记是在循环中创建的,所以它总是指最后一个标记。

infowindow每次都在重新定义。因此,内容将始终是您最后一个结果的内容。

这是我通常的做法。

// create this outside of your loop
var infowindow = new google.maps.InfoWindow({
    content: ""
});

for (var i = 0; i < result.length; i++) {
    var myCenter= new google.maps.LatLng(result[i].lat,result[i].log);
    var marker=new google.maps.Marker({
        position: myCenter,
        map:  map
    });

    bindInfoWindow(marker, map, infowindow, result[i].desc);  
}


function bindInfoWindow(marker, map, infowindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
        infowindow.setContent(html); 
        infowindow.open(map, marker); 
    }); 
}
于 2013-07-30T08:02:01.513 回答