2012-09-27 19 views
5

我有以下代碼,當單擊某個特定標記並打開一個窗口時,將打開一個infowindow。有人知道如何關閉以前的infowindow時,另一個被點擊?單擊另一個標記時關閉infowindow

google.maps.event.addListener(marker, 'click', function() { 
      infowindow.open(map1, marker); 
     }); 
+0

您能向我們展示更多的代碼嗎? infowindow是在哪裏創建的? – duncan

+1

可能的重複http://stackoverflow.com/questions/5110956/close-other-infowindows-nicely?rq=1或http://stackoverflow.com/questions/12567280/google-api-v3-multiple-infowindows-加上關閉點擊/ 12567780 – geocodezip

回答

9

只要確保你只能創建在全球範圍內ONE infoWindow,像這樣:

infoWindow = new google.maps.InfoWindow; //static infoWindow for all your markers 
google.maps.event.addDomListener(window, 'load', function() { 
    //create your markers here 
    google.maps.event.addListener(marker, 'click', function() { 
       infoWindow.open(map1, marker); //take care with case-sensitiveness 
      }); 
}); 

UPDATE

  • 修復區分大小寫鄧肯發現。
  • 說明標記點擊處理程序必須在標記創建後連接,無論是在頁面加載事件中。
+0

應該是infoWindow.open作爲Javascript區分大小寫 – duncan

+0

它不工作。同樣每次點擊一個窗口 – user1292656

+0

所有的標記在頁面加載這就是爲什麼創建它不工作:) – user1292656

1

infowindow.close()將關閉一個開放的infowindow。這取決於你如何創建你的infowindows - 你只有一個infowindow變量來處理所有的,或者你是否爲每個標記創建了多個infowindow對象?如果沒有在這個階段看到更多的代碼,很難更具體。

+0

是的,我使用相同的變量來處理所有:) – user1292656

1

爲了關閉以前的infowindow,當單擊另一個infowindow時,需要確保以下代碼在函數initialize()循環中。

infoWindow = new google.maps.InfoWindow;

4

在你的JS文件中創建一個全局變量,將其命名爲lastOpenedInfoWindow或任何你想要的,在那之後關閉它打開一個新的信息窗口前,分配「lastOpenedInfoWindow」當前打開的窗口等等

google.maps.event.addListener(marker, 'click', (function(marker, content, infowindow) { 
     return function() { 
      closeLastOpenedInfoWindow(); 
      infowindow.setContent(content); 
      infowindow.open(map, marker); 
      lastOpenedInfoWindow = infowindow; 
     }; 
    })(marker, makrerdata[i], infowindow)); 
} 


function closeLastOpenedInfoWindow() { 
    if (lastOpenedInfoWindow) { 
     lastOpenedInfoWindow.close(); 
    } 
} 
0

確保你已經有一個InfoWindow實例 - 新的google.maps.InfoWindow。因此,每次打開標記時,只有一個實例在initialize方法或全局聲明的InfoWindow中聲明。

var infoWindow = new google.maps.InfoWindow
確保此infoWindow僅實例化一次。否則,每次單擊標記時都會打開多個窗口。

marker.addListener('click', function() {         
    infoWindow.setContent(infowincontent); 
    infoWindow.open(clntLocMap, marker); 
}); 
相關問題