我正在使用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,但无效(无效或只使用初始信息窗)。
任何帮助/提示都将不胜感激。
答案 0 :(得分:0)
我缺少的是infowindow有一个SetContent函数,因此我每次都通过重新声明一个变量来创建一个新的infowindow。为什么他们都在关闭后重新出现,我不确定。
在google.maps.event.addListener()函数中,替换:
var infowindow = new google.maps.InfoWindow({
content: contentString
});
简单调用setContent方法:
infowindow.setContent(contentString);
解决了我的问题。