Google地图标记重复了infoWindows

时间:2018-01-15 05:42:29

标签: javascript google-maps marker

我正在使用Google Maps API,并允许用户通过点击在地图上移动标记。我的目标是收听点击事件,当它发生时,移动标记并更新信息窗口(点击标记时的lat,lng信息)。

下面的代码“有效”,虽然它复制了infowindows(第一次点击,你得到一个窗口,第二次点击,你得到更新的infowindow和第一个,等等)。我该如何删除以前的infowindow实例?

<script>
function myMap() {
var mapProp= {
    center:new google.maps.LatLng($latlng['lat'], $latlng['lng']),
    mapTypeId: 'satellite',
    zoom:$latlng['zoom']
};

var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);


var marker = new google.maps.Marker({
          position: new google.maps.LatLng($latlng['lat'], $latlng['lng']),
          map: map,
          title: 'Location'
        });

var contentString = '<div id="content">'+
            '<div id="siteNotice">'+
            '</div>'+
            '<div id="bodyContent">'+
            '$latlng['address']'+
            '</div>'+
            '</div>';


var infowindow = new google.maps.InfoWindow({
          content: contentString
        });

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

google.maps.event.addListener(map, 'click', function(event) {

            placeMarker(event.latLng);
            var contentString = '<div id="content">'+
            '<div id="siteNotice">'+
            '</div>'+
            '<div id="bodyContent">'+
            event.latLng.lat()+","+event.latLng.lng()+
            '</div>'+
            '</div>';


            var infowindow = new google.maps.InfoWindow({
                      content: contentString
                    });

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

        function placeMarker(location) {



            if (marker == undefined){
                marker = new google.maps.Marker({
                    position: location,
                    map: map,
                    animation: google.maps.Animation.DROP,
                });
            }
            else{
                marker.setPosition(location);
            }

        }

}
</script>

我尝试了各种解决方案,特别是在那里添加了一个event.removeListener,但无效(无效或只使用初始信息窗)。

任何帮助/提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我缺少的是infowindow有一个SetContent函数,因此我每次都通过重新声明一个变量来创建一个新的infowindow。为什么他们都在关闭后重新出现,我不确定。

在google.maps.event.addListener()函数中,替换:

var infowindow = new google.maps.InfoWindow({
                  content: contentString
                });

简单调用setContent方法:

infowindow.setContent(contentString);

解决了我的问题。