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); 
}
Était-ce utile?

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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top