1

我的谷歌地圖API的標記在一個名爲markerList詞典列表。所有這些都被放置在地圖上。然後我創建了我所有的infowindow的數組。然後我需要addListener爲他們每個人,所以當在地圖上點擊標記時,它會在正確的地圖和infowindow上調用infowindow.open谷歌地圖API V3的信息窗口的錯誤:「信息窗口沒有定義」

不幸的是,當我點擊一個標誌,我得到的螢火控制檯以下錯誤:

infowindow is not defined 

infowindow.open(map,infowindowList[window]); 

這裏是我的代碼:

var infowindowList = {}; 

for (var aMarker in markerList){ 
    infowindowList[aMarker] = new google.maps.InfoWindow({ 
      content: "This is a test!", 
      size: new google.maps.Size(50,50) 
    }); 

    console.log(infowindowList[aMarker]); 
} 

console.log("Done creating infowindowList...\n...Adding listeners"); 

for (var window in infowindowList){ 
     google.maps.event.addListener(markerList[window], 'click', function() { 
      // infowindow.open(map,infowindowList[window]); // wrong, see Edit 
       infowindowList[window].open(map,markerList[window]); 
     }); 
     console.log("added listener for window: ", infowindowList[window]); 

} 

我覺得發生這種情況,因爲在 google.maps.event.addListener(markerList[window]...功能,我註冊要在點擊爲 infowindow.open(map,infowindowList[window])運行的功能,但該值, window,是本地功能,所以當我點擊MA rker,該功能不起作用,因爲它不知道 window是什麼。那是對的嗎?

編輯:由於geocodezip指出,infowindow不存在。所以我將其更改爲infowindowList[window].open(map,markerList[window]);,同時將最後一個參數更改爲markerlist[window],因爲它應該是一個標記,而不是另一個infowindow。

回答

2

你所得到的錯誤「信息窗口沒有定義」,因爲信息窗口變量沒有定義。它肯定沒有在您發佈的代碼中定義。

通常它是全局定義所以有一個信息窗口(第2版的默認行爲),但在這種情況下,你仍然必須定義它,創造它(通常在onload功能)。

working example

+0

好的,謝謝你,所以我固定的線是'infowindowList [窗口]。開(地圖,markerList [窗口]);',但現在,不管是哪個標記我點擊,它將始終在一個標記上方顯示消息 – kalaracey

+0

@kalaracey聽衆都重複使用完成循環的同一'window'變量,這就是爲什麼它在最後一個標記上彈出打開的原因。請參閱[**這個答案**]中的'addListener'(http://stackoverflow.com/a/3059129/1325290)函數包裝爲'window'創建一個新的作用域,並保存每個標記的值(替換'標記,我'與'窗口')。你的代碼寫入的方式,最終會打開幾個InfoWindows,很可能你只需要一個,然後按照我鏈接的答案中的方法。 –

+0

這是因爲循環完成後,窗口始終具有相同的值。這可以通過函數閉包來解決(如果查看示例,createMarker函數在函數閉包中保存與標記關聯的infowindow內容)。 – geocodezip