【问题标题】:Google Maps API Marker谷歌地图 API 标记
【发布时间】:2013-07-30 04:42:44
【问题描述】:

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

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

                    }

               }
            }

【问题讨论】:

    标签: google-maps-api-3 google-maps-markers


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2015-05-09
      • 2020-10-12
      • 2017-12-11
      • 2011-12-25
      相关资源
      最近更新 更多