Die einzige konsistente Lösung, die ich hier gefunden habe, besteht darin, einen Zeiger auf die zu behalten infoWindow
und ihre .getMap()
Methode zu überprüfen , wann immer Sie überprüfen müssen, ob sie geschlossen wurde.
Der Grund dafür ist, dass das Klicken auf ein anderes Element dazu führen kann, dass das infoWindow aus anderen Gründen geschlossen wird ... ohne dass das closeclick
Ereignis ausgelöst wird .
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);
... Wenn Sie sich buchstäblich nur darum kümmern, ob das infoWindow
mit der "X" -Taste geschlossen wurde, ist die Überwachung closeclick
in Ordnung. Es gibt jedoch andere Gründe, warum es geschlossen sein könnte oder wurde.
Es gibt ein Ereignis für den Aufruf von Infowindows
closeclick
, das Ihnen helfen kannvar 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 });
quelle
Durch Vereinfachung und Erweiterung der am besten bewerteten Lösung können Sie den Marker während der Behandlung des Marker-Klick-Ereignisses erstellen und gleichzeitig dessen Entfernung aufgrund des
closeclick
Ereignisses des x-Symbols verpacken .Hier ist ein Beispiel, das die Vermeidung doppelter Infofenster enthält, indem ein boolescher
hasInfoWindow
Status für Markierungen festgelegt wird.newMarker.addListener('click', function () { // If a marker does not yet have an info window, create and show it if (newMarker['hasInfoWindow'] !== true) { newInfoWindow = new google.maps.InfoWindow({content: infoContent}); mapSet['infoWindowsObj'].push(newInfoWindow); newMarker['hasInfoWindow'] = true; newInfoWindow.open(mapSet, newMarker); // If info window is dismissed individually, fully remove object google.maps.event.addListener(newInfoWindow, 'closeclick', function () { newInfoWindow.setMap(null); newMarker['hasInfoWindow'] = false; mapSet['infoWindowsObj'].filter(arrayItem => arrayItem !== newInfoWindow); }); } });
Wenn Sie dann alle geöffneten Infofenster aufgrund eines Klickereignisses auf einer Karte entfernen möchten, können Sie den Inhalt von durchlaufen
mapSet['infoWindowsObj']
, um jedes Fenster vollständig zu entfernen.Ich glaube, mit diesem Verhalten können Sie in den meisten Fällen mit der Verwendung von Infowindow durchkommen, ohne das Ganze gemäß dem benutzerdefinierten Popup-Beispiel von Google neu implementieren zu müssen .
quelle
Versuche dies:
var closeBtn = $('.gm-style-iw').next(); closeBtn.click(function(){ //other things you want to do when close btn is click that.infowindow.close(); });
Ich habe diese Klickfunktion überschrieben, da die Klickschaltfläche in Safari nicht funktioniert, nachdem ich die CSS / Position geändert habe.
quelle