web-dev-qa-db-fra.com

API Google Maps v3 infowindow fermer événement/rappel?

J'aime garder une trace de toutes les infowindows ouvertes sur mon interface Google Maps (je stocke leurs noms dans un tableau), mais je ne vois pas comment les supprimer de mon tableau lorsqu'elles sont fermées via le "x "dans le coin supérieur droit de chacun. 

Y a-t-il une sorte de rappel que je peux écouter? Ou peut-être que je peux faire quelque chose comme addListener("close", infowindow1, etc

66
Colin

il existe un événement pour l'appel d'Infowindows closeclick qui peut vous aider

var currentMark;
var infoWindow = new google.maps.InfoWindow({
            content: 'im an info windows'
        });
google.maps.event.addListener(marker, 'click', function () {
          infoWindow.open(map, this);
          currentMark = this;

});
google.maps.event.addListener(infoWindow,'closeclick',function(){
   currentMark.setMap(null); //removes the marker
   // then, remove the infowindows name from the array
});
150
Jorge

La seule solution cohérente que j'ai trouvée ici consiste à conserver un pointeur sur infoWindow et à vérifier sa méthode .getMap() chaque fois que vous devez valider si elle a été fermée.

La raison en est que cliquer sur un autre élément peut entraîner la fermeture de la fenêtre d’information pour d’autres raisons ... sans le déclenchement de l’événement closeclick.

var infoWindow = new google.maps.InfoWindow({ content: 'Something to put here.' });
infoWindow.open(map, infoWindow);

setInterval(function ()
{
    console.log("infoWindow is bound to map: "+(infoWindow.getMap() ? true : false));

}, 1000);

... Si vous ne vous souciez littéralement que si la infoWindow a été fermée en utilisant le bouton "X", alors la surveillance de closeclick convient. Cependant, il y a d'autres raisons pour lesquelles il peut être ou ont été fermés.

7
Ben Guild

Essaye ça: 

var closeBtn = $('.gm-style-iw').next();
closeBtn.click(function(){
    //other things you want to do when close btn is click
    that.infowindow.close();
});

J'écrase cette fonction de clic car le bouton de clic ne fonctionnera pas dans un safari après en avoir changé la position css.

0
Tina Chen