Pregunta

No puedo cerrar la ventana de información del marcador estoy arrastrando, alguna idea? Gracias por su ayuda

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); 
}
¿Fue útil?

Solución

Sí, se define infowindow en un ámbito privado, pero el acceso fuera de ese ámbito. Esto, unido al inicio de la secuencia de comandos:

var infowindow;

Y retire 'var' de su línea constructor:

infowindow = new google.maps.InfoWindow(

El código final (de la muestra) sería tener este aspecto .

Un poco más de fondo

Cuando se define una variable con var, que está ligado a ese ámbito. Si se define en una función, solo que la función y otras funciones definidas en ella pueden acceder a la variable. La única otra manera de pasar alrededor es como un parámetro en una función.

Actualizar Me gustaría hacer esto para facilitar múltiples ventanas de información. Noto que he vuelto a la declaración var originales para mantenerla como alcance esa función. luego regrese la referencia al objeto de utilizar más tarde:

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top