InfoWindow ne veut pas fermer avec Google Maps Api V3
-
19-09-2019 - |
Question
Je ne peux pas fermer la fenêtre d'information du marqueur je traîne, une idée? Merci pour votre aide
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function closeMapInfoWindow() {infowindow.close(); }
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message,
});
infowindow.open(gMap2,gMarker);
}
La solution
Oui, vous définissez infowindow
dans un cadre privé, mais l'accès à l'extérieur cette portée. Ajouter ceci au début de votre script:
var infowindow;
Et remove 'var' de votre ligne constructeur:
infowindow = new google.maps.InfoWindow(
Le code fini (de votre échantillon) serait ressembler à ceci .
Un peu plus fond
Lorsque vous définissez une variable avec var
, il est lié à cette portée. Si vous définissez dans une fonction, seule cette fonction et d'autres fonctions définies dans il peut accéder à la variable. La seule autre façon de le transmettre est de l'ordre en tant que paramètre à une fonction.
Mise à jour Je ferais cela pour faciliter plusieurs infowindows. Remarquez que je suis revenu à la déclaration de var
originale pour le garder scope à cette fonction. Je reviens donc la référence à l'objet pour l'utiliser plus tard:
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
// Store reference to info window
var info = displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", function(){ info.close } );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message }
);
infowindow.open(gMap2,gMarker);
return infowindow; // Return the reference to the infowindow
}