我的谷歌地圖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。
好的,謝謝你,所以我固定的線是'infowindowList [窗口]。開(地圖,markerList [窗口]);',但現在,不管是哪個標記我點擊,它將始終在一個標記上方顯示消息 – kalaracey
@kalaracey聽衆都重複使用完成循環的同一'window'變量,這就是爲什麼它在最後一個標記上彈出打開的原因。請參閱[**這個答案**]中的'addListener'(http://stackoverflow.com/a/3059129/1325290)函數包裝爲'window'創建一個新的作用域,並保存每個標記的值(替換'標記,我'與'窗口')。你的代碼寫入的方式,最終會打開幾個InfoWindows,很可能你只需要一個,然後按照我鏈接的答案中的方法。 –
這是因爲循環完成後,窗口始終具有相同的值。這可以通過函數閉包來解決(如果查看示例,createMarker函數在函數閉包中保存與標記關聯的infowindow內容)。 – geocodezip