/ / Jak zatrzymać propagację zdarzeń w Google Maps - javascript, google-maps, infowindow

Jak zatrzymać propagowanie zdarzeń closeclick w Google Maps - javascript, google-maps, infowindow

mam click Zdarzenie powiązane z elementem, który zawieraMapa Google. Gdy użytkownik zamyka InfoWindow na mapie, klikając krzyżyk, zdarzenie click jest uruchamiane i rozprzestrzenia się po całym DOM. Chcę zatrzymać tę propagację zdarzeń, aby okno infoWindow zostało zamknięte, ale zdarzenie click nie zostało podniesione na moim kontenerze.

Google Maps API zapewnia closeclick zdarzenie, które pojawia się, gdy InfoWindow jest zamknięte to zdarzenie nie może być dostępne (nie występuje jako parametr):

google.maps.event.addListener(infowindow, "closeclick", function() {
// The API function doesn"t have the e parameter, I can"t access closeclick
});

Ponieważ mój kontener jest powiązany z click w każdym razie nie jestem nawet pewien closeclick.stopPropagation() zadziałałoby. Więc szukam sposobu na uzyskanie dostępu do zdarzenia kliknięcia rzuconego przez Google Map, gdy użytkownik kliknie krzyżyk. Oczywiście, html map google jest tak popsuty, że nie mogę uzyskać dostępu do elementu cross DOM, aby dodać eventListener do to (wszędzie jest to div, bez żadnych klas).

Jakieś sugestie?

Edytuj: Aby obejść ten problem, rozwiązałem ten problem, modyfikując mój własny kod i testując, skąd pochodzi zdarzenie, gdy jest ono przechwytywane przez mój kontener:

container.addEventListener("click", function(ev) {
if (ev.target.src == "https://maps.gstatic.com/mapfiles/api-3/images/mapcnt6.png") {
return false;
}
// the code I want to execute only when the click event doesn"t come from the InfoWindow
});

Odpowiedzi:

0 dla odpowiedzi № 1
google.maps.event.addListener(infowindow, "closeclick", function(e) {
e.stopPropagation();
});

Czy to nie działa?


0 dla odpowiedzi nr 2

Możesz użyć następującego kodu, który mi pomógł:

var aListener = google.maps.event.addListener(map, "click", function(event) {
// Try to prevent event propagation to the map
event.stop();
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
});