繁体   English   中英

Google Maps API标记

[英]Google Maps API Marker

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

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);

                    }

               }
            }

您需要关闭。 您正在做的是为每个标记重新定义点击处理程序功能。 单击所有标记后,将执行以下行:

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); 
    }); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM