在Google Maps API v3中打开第二个InfoWindow

时间:2012-11-19 20:42:51

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

我正在为音乐场所和活动数据库实施地图界面,并遇到了一个有趣的问题。我有一系列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上的大部分搜索结果都为我提供了有关地图上事件监听器的信息 - 这是解雇此类事件的唯一方法,还是我正在努力做的事情?

如果需要任何其他代码示例,请与我们联系。谢谢你的任何建议!

1 个答案:

答案 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})

有关InfoWindow API

的更多信息