2010-06-03 13 views
28

Como dice el título, en un evento determinado (para mí, esto sucede al abrir un nuevo google.maps.InfoWindow Quiero poder cerrar cualquier otra ventana de información actualmente abierta. En este momento , Puedo abrir muchos a la vez ... pero solo quiero 1 abierto a la vez.Cerrar cualquier ventana de información abierta en google maps api v3

Estoy creando dinámicamente las ventanas de información (es decir, no sé de antemano cuántas se generarán), por lo que el evento de clic de la ventana de información actual (que es donde quiero que se cierren todas las demás) no tengo ninguna referencia a ninguna otra ventana de información abierta en la que llamar al close(). Me pregunto cómo puedo lograr esto No soy un programador de JavaScript experimentado, así que no sé si necesito usar el reflejo o algo similar aquí.

¿Sería la mejor manera de guardar todas las referencias en algún tipo de colección, luego recorrer la lista para cerrarlas todas?

Gracias.

Respuesta

64

Me encontré con el mismo problema y lo solucioné al crear una ventana de información global.

var infowindow = new google.maps.InfoWindow(); 

Entonces tengo una función para hacer lo siguiente en el detector de clics:

function getInfoWindowEvent(marker) { 
    infowindow.close() 
    infowindow.setContent("This is where my HTML content goes."); 
    infowindow.open(map, marker); 
} 

Con ello se consigue lo que creo que está buscando b/c ahora hay sólo una ventana de información sobre la mapa y simplemente lo cierro, vuelvo a cargar el contenido y lo vuelvo a abrir para el marcador dado.

8

Debería ser suficiente tener una ventana de información global y luego cambiar la posición y el contenido de esa ventana de información.

var infowindow = new google.maps.InfoWindow(); 

// Call this function to open an infowindow i.e. on click. 
function respondToClick(latlng) { 
    infowindow.setOptions({ 
    position: latlng, 
    content" "Hello, world" 
    }); 
} 

medida que se utiliza la misma ventana de información cada vez, se le guarantee'd que sólo tenga una abierta, y se utiliza menos recursos de memoria/que la creación y luego la destrucción de múltiples ventanas de información.

0

La mejor manera de hacer esto ... Creo que es tener un objeto con las ventanas de información que se han abierto

Tengo dos objetos, informaciones han creado todas las ventanas de información y los marcadores contiene todos los marcadores que con las ventanas de información por lo que sólo ejecuta este bucle de funciones que el objeto ventana de información y cierre todas las ventanas de información

function CloseInfowindows() { 
    for (var mkey in infos) { 
    var mobj = markers[mkey]; 
    mobj.infowindow.close(); 
    } 
} 
2

ventana de información es variable local y la ventana no está disponible en el momento de close()

var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow 
= null; 

... 

google.maps.event.addListener(marker, 'click', function() { 
    if (infowindow) { 
     infowindow.close(); 
    } 
    infowindow = new google.maps.InfoWindow(); 
    ... }); 
... 

REF: Close all infowindows in Google Maps API v3

1

he decidido crear una matriz de todas las Infoboxes creado de forma dinámica. Cuando haga clic en cualquier primer recorrido del conjunto y luego cierre todos, abra solo uno en el que haya hecho clic.

var allInfos = []; 

function closeInfos() { 
     for (i = 0; i < allInfos.length; i++) { 
      allInfos[i].close(); 
     } 
} 

Una vez creada la caja de información, de forma dinámica se le agrega a la matriz de cada una de la siguiente manera:

allInfos.push(infowindow); 
1

que necesita sólo una línea: $(".gm-style-iw").next().click();

Hay un div con esta clase, 'gm-style-iw', dentro de la ventana de información. Después, está el div del botón de cerrar. Por lo tanto, este código hará clic en cada botón de cerrar infowindow existente en el mapa

+1

Debe explicar por qué y cómo esto resuelve el problema. Ver [aquí] (http://stackoverflow.com/help/how-to-answer) para más detalles ... – jkalden

+1

Hay un div con esta clase, 'gm-style-iw', dentro de la ventana de información. Después, está el div del botón de cerrar. Por lo tanto, este código hará clic en cada botón de cerrar infowindow existente en el mapa. –

+0

¡funciona, gracias! y no hay necesidad de crear toneladas de variables – djdance

Cuestiones relacionadas