Fermeture de toutes les fenêtres d'informations ouvertes dans google maps api v3

Comme l'indique le titre, sur un événement donné (pour moi, cela se produit lors de l'ouverture d'un nouveau google.maps.InfoWindow je souhaite pouvoir fermer toute autre fenêtre d'information actuellement ouverte. Maintenant, je peux ouvrir plusieurs fois à la fois. . Mais je veux seulement 1 ouvrir à la fois.

Je crée les fenêtres d'informations dynamiquement (c'est-à-dire que je ne connais pas à l'avance combien seront générées), donc dans l'événement de clic de la fenêtre d'information actuelle (c'est là que je veux que tous les autres ouverts soient fermés) T une référence à l'une des autres fenêtres d'informations ouvertes sur lesquelles appeler close() . Je me demande comment je peux le faire. Je ne suis pas un programmeur expérimenté JavaScript, donc je ne sais pas si je dois utiliser la réflexion ou quelque chose de similaire ici.

Est-ce que la meilleure façon d'être juste pour enregistrer toutes les références dans une sorte de collection, puis passer à travers la liste de les fermer tous?

Merci.

J'ai rencontré le même problème et l'ai réparé en créant une fenêtre d'information globale.

 var infowindow = new google.maps.InfoWindow(); 

Ensuite, j'ai une fonction pour faire ce qui suit sur l'écouteur de clics:

 function getInfoWindowEvent(marker) { infowindow.close() infowindow.setContent("This is where my HTML content goes."); infowindow.open(map, marker); } 

Cela réalise ce que je pense que vous cherchez b / c il n'y a maintenant qu'une seule fenêtre d'information sur la carte et je la ferme, recharge le contenu et l'ouvrez à nouveau pour le marqueur donné.

Il devrait suffire d'avoir une infowindow globale, puis de changer la position et le contenu de cette infowindow.

 var infowindow = new google.maps.InfoWindow(); // Call this function to open an infowindow ie on click. function respondToClick(latlng) { infowindow.setOptions({ position: latlng, content" "Hello, world" }); } 

Comme le même infowindow est utilisé à chaque fois, vous êtes obligé de ne jamais avoir un ouvert, et il utilise moins de ressources / de mémoire que de créer et ensuite de détruire de multiples infowindows.

Infowindow est une variable locale et la fenêtre n'est pas disponible au moment de la fermeture ()

 var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow = null; ... google.maps.event.addListener(marker, 'click', function() { if (infowindow) { infowindow.close(); } infowindow = new google.maps.InfoWindow(); ... }); ... 

REF: Fermer toutes les infowindows dans Google Maps API v3

J'ai décidé de créer un tableau de toutes les Infobox créées dynamiquement. Lorsque vous cliquez sur un premier voyage, le tableau, puis vous fermez, tous ouvrent un seul sur lequel vous avez cliqué.

 var allInfos = []; function closeInfos() { for (i = 0; i < allInfos.length; i++) { allInfos[i].close(); } } 

Une fois créé l'infobox, dynamiquement, vous l'ajoutez au tableau, comme suit:

 allInfos.push(infowindow); 

La meilleure façon de le faire, je pense … c'est avoir un objet avec les inférences que vous avez ouvertes

J'ai deux objets, les infos ont toutes les infowindows créées et les marqueurs contiennent tous les marqueurs avec leur infowindows, alors j'exerce juste ces fonctions qui bouclent l'objet infowindow et ferment toutes les infowindows

 function CloseInfowindows() { for (var mkey in infos) { var mobj = markers[mkey]; mobj.infowindow.close(); } } 

Vous avez besoin d'une seule ligne: $(".gm-style-iw").next().click();

Il y a un div avec cette classe, 'gm-style-iw', dans l'infowindow. Ensuite, il y a le div du bouton de fermeture. Donc, ce code clique sur chaque bouton de fermeture infowindow existant dans la carte