2012-11-19 91 views
0

我正在爲音樂場地和事件數據庫實現Maps界面,並遇到了一個有趣的問題。我有一系列HTML元素,通過onclick調用某個Javascript函數。這些調用運行正常,並且第一次正確運行javascript函數(所有信息都正確傳遞並且我的調試警報正確顯示)以及infoWindow顯示。第二次點擊其中一個div時,第一個div正確關閉,下面代碼中的最終警報觸發正確的信息,但新的InfoWindow不會彈出。在Google Maps API v3中打開第二個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]); 
} 

我可以保證標記[]數組被正確地輸送。

我都試過了,除其他事項外...

  • 創建數組來保存信息窗口,而不是使用一個變量curInfoWindow

  • 不具有陣列中的任何自動關閉像開始generateInfoWindow()函數的作用

  • 在mapsInitialize()函數中自動創建信息窗口

Google在搜索解決方案時的大部分結果爲我帶來了有關地圖上的事件偵聽器的信息 - 唯一的辦法就是像這樣觸發事件,或者我試圖做的事情是有效的嗎?

如果需要其他代碼示例,請告訴我。感謝您的任何建議!

+0

你檢查你的JavaScript錯誤? – geocodezip

+0

你是怎麼調用generateInfoWindow的? – geocodezip

+0

你確定你可以做到這一點'curInfoWindow = new google.maps.InfoWindow(options = {size:new google.maps.Size'? – RASG

回答

0

據谷歌地圖API:

信息窗口可以被附加到Marker對象(在這種情況下, 它們的位置是基於所述標記的位置)或在地圖本身 上以規定的經緯度。如果您只希望一個信息窗口在 的某個時間顯示(與Google地圖上的行爲一樣),則只需創建一個 信息窗口,您可以在地圖事件(例如用戶點擊)後重新分配到不同位置或標記 )。但是,與Google地圖API的V2中的行爲不同,如果您願意,地圖現在可以顯示多個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

相關問題