我正在为音乐场所和活动数据库实施地图界面,并遇到了一个有趣的问题。我有一系列HTML元素,通过onclick调用某个Javascript函数。调用正确运行,javascript函数第一次正确运行(所有信息都正确传递,我的调试警报正确显示),并显示infoWindow。第二次单击其中一个div时,第一个正确关闭,下面代码中的最终警报会触发正确的信息,但新的InfoWindow不会弹出。
地图设置代码:
function mapsInitialize() {
var mapOptions = {
center: new google.maps.LatLng(42.4439614, -76.5018807),
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("mapSection"), mapOptions);
google.maps.event.trigger(map, 'resize');
for(var x = 0; x < markers.length; x++){
var tempOptions = {
position: markers[x].position,
title: markers[x].name,
map: map
}
markerObjects[markers[x].title] = new google.maps.Marker(tempOptions);
}
}
来自div的函数onclick:
function generateInfoWindow(despacedName, despacedTitle, eventTitle, url, date, time){
if(curInfoWindow){
alert("closing " + curInfoWindow.getContent());
curInfoWindow.close();
curInfoWindow = null;
}
curInfoWindow = new google.maps.InfoWindow(options = {size: new google.maps.Size(150,50)});
curInfoWindow.setContent("<a class=\"eventLink\" href=\""+url+"\">"+eventTitle+"</a><br><br>"+markerObjects[despacedName].title+"<br>"+date+" at "+time);
curInfoWindow.open(map, markerObjects[despacedName]);
alert(despacedName+" is "+markerObjects[despacedName]);
}
我可以保证marker []数组被正确送入。
我已经尝试了,除其他外......
创建一个数组来保存infoWindows而不是使用一个curInfoWindow变量
数组中没有任何内容会像generateInfoWindow()函数的开头一样自动关闭
在mapsInitialize()函数中自动创建信息窗口
在搜索解决方案时Google上的大部分搜索结果都为我提供了有关地图上事件监听器的信息 - 这是解雇此类事件的唯一方法,还是我正在努力做的事情?
如果需要任何其他代码示例,请与我们联系。谢谢你的任何建议!
答案 0 :(得分:0)
根据Google Maps API:
InfoWindows可以附加到Marker对象(在这种情况下) 他们的位置是基于标记的位置)或地图本身 在指定的LatLng。如果您只想显示一个信息窗口 一段时间(就像Google地图上的行为一样),您只需创建一个 信息窗口,您可以将其重新分配到不同的位置或标记 在地图上发生事件(例如用户点击)。与V2中的行为不同 但是,谷歌地图API,地图现在可能会显示多个InfoWindow 如果您这样选择对象。
也许这会奏效:
function generateInfoWindow(despacedName, despacedTitle, eventTitle, url, date, time){
if(!curInfoWindow){
curInfoWindow = new google.maps.InfoWindow({maxWidth:150});
}
curInfoWindow.setContent("<a class=\"eventLink\" href=\""+url+"\">"+eventTitle+"</a><br><br>"+markerObjects[despacedName].title+"<br>"+date+" at "+time);
curInfoWindow.open(map, markerObjects[despacedName]);
alert(despacedName+" is "+markerObjects[despacedName]);
}
根据规范,这应该将现有的curInfoWindow移动到新标记并更新内容。
注意:此代码无效
new google.maps.InfoWindow(options = {size: new google.maps.Size(150,50)})
没有尺寸属性。你能做的最好的就是
new google.maps.InfoWindow({maxWidth:150})
的更多信息