2012-09-27 22 views
5

Mam następujący kod, aby otworzyć infomato, gdy kliknie określony znacznik i otworzy się okno. Czy ktoś wie, jak zamknąć poprzednie infowindow po kliknięciu innego?Zamknij infowindow po kliknięciu innego znacznika

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

Czy możesz pokazać nam więcej kodu, np. gdzie najpierw utworzono infowindow? – duncan

+1

możliwy duplikat adresu http://stackoverflow.com/questions/5110956/close-other-infowindows-nicely?rq=1 lub http://stackoverflow.com/questions/12567280/google-api-v3-multiple-infowindows- plus-close-on-click/12567780 # 12567780 – geocodezip

Odpowiedz

9

Tylko upewnij się utworzyć tylko jeden infoWindow w zasięgu globalnym, takich jak to:

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: case

  • Fix wrażliwy zauważony przez Duncan.
  • Zilustrowanie procedur obsługi znaczników należy połączyć po utworzeniu znacznika, zarówno w zdarzeniu ładowania strony.
+0

powinien być infoWindow.open jak Javascript rozróżnia wielkość liter – duncan

+0

to nie działa. Znowu każde kliknięcie jest jednym okienkiem – user1292656

+0

Wszystkie znaczniki są tworzone przy ładowaniu strony, dlatego nie działa :) – user1292656

1

infowindow.close() spowoduje zamknięcie otwartego okna informacyjnego. To zależy od tego, jak tworzysz swoje infowindows - czy masz tylko jedną zmienną infowindow do obsługi wszystkich, czy też tworzysz wiele obiektów infowindow dla każdego markera? Trudno być bardziej szczegółowym, nie widząc więcej kodu na tym etapie.

+0

Tak używam tej samej zmiennej do obsługi wszystkich :) – user1292656

1

Aby zamknąć poprzednie okno informacyjne po kliknięciu innego, należy upewnić się, że poniższy kod znajduje się w pętli funkcji initialize().

infoWindow = new google.maps.InfoWindow;

4

Utwórz zmienną globalną w pliku JS, nazwij go lastOpenedInfoWindow lub cokolwiek chcesz, po czym zamknij ją przed otwarciem nowego okna informacyjnego, należy przypisać „lastOpenedInfoWindow” do aktualnie otwartego okna i tak dalej

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

Upewnij się, że masz jedno wystąpienie InfoWindow - nowe google.maps.InfoWindow. Dlatego za każdym kliknięciem znacznika otwiera się tylko jedna instancja zadeklarowana w metodzie inicjowania lub globalnie zadeklarowana w InfoWindow.

var infoWindow = nowy google.maps.InfoWindow
Upewnij się, że ta informacja jest tworzona tylko raz. W przeciwnym razie będziesz mieć wiele okien otwartych za każdym razem, gdy klikniesz znacznik.

marker.addListener('click', function() {         
    infoWindow.setContent(infowincontent); 
    infoWindow.open(clntLocMap, marker); 
}); 
Powiązane problemy