2012-09-27 49 views
5

Tengo el siguiente código para abrir una ventana de información cuando se hace clic en un marcador específico y se abre una ventana. ¿Alguien sabe cómo cerrar la ventana de información previa cuando se hace clic en otra?Cerrar infowindow cuando se hace clic en otro marcador

google.maps.event.addListener(marker, 'click', function() { 
      infowindow.open(map1, marker); 
     }); 
+0

¿Puede mostrarnos más acerca del código, p. ¿Dónde se creó primero infowindow? – duncan

+1

posible duplicado de http://stackoverflow.com/questions/5110956/close-other-infowindows-nicely?rq=1 o http://stackoverflow.com/questions/12567280/google-api-v3-multiple-infowindows- más-close-on-clic/12567780 # 12567780 – geocodezip

Respuesta

9

Sólo asegúrese de crear solo un infoWindow en el ámbito global, como este:

infoWindow = new google.maps.InfoWindow; //static infoWindow for all your markers 
google.maps.event.addDomListener(window, 'load', function() { 
    //create your markers here 
    google.maps.event.addListener(marker, 'click', function() { 
       infoWindow.open(map1, marker); //take care with case-sensitiveness 
      }); 
}); 

ACTUALIZACIÓN: caso

  • Fix sensibles descubierto por Duncan.
  • Ilustre el marcador Los manejadores de clic deben estar conectados después de la creación del marcador, ambos dentro del evento de carga de página.
+0

debe infoWindow.open como Javascript mayúsculas y minúsculas – duncan

+0

no trabaja. Una vez más cada clic es una ventana – user1292656

+0

Todos los marcadores se crean en eso de carga de página por la que no funciona :) – user1292656

1

infowindow.close() cerrará una ventana de información abierta. Sin embargo, depende de cómo esté creando sus infowindows: ¿tiene solo una variable infowindow para manejar todo o está creando múltiples objetos infowindow para cada marcador? Difícil ser más específico sin ver más de su código en esta etapa.

+0

Sí estoy usando la misma variable para manejar todos :) – user1292656

1

Para cerrar la ventana de información previa cuando se hace clic en otra, debe asegurarse de que el siguiente código se encuentre en el bucle de función initialize().

infoWindow = new google.maps.InfoWindow;

4

crear una variable global en el archivo JS, nombre que lastOpenedInfoWindow o como se quiera, después de eso cerca que antes de abrir una nueva ventana de información, asignar el "lastOpenedInfoWindow" a la ventana abierta actualmente y así sucesivamente

google.maps.event.addListener(marker, 'click', (function(marker, content, infowindow) { 
     return function() { 
      closeLastOpenedInfoWindow(); 
      infowindow.setContent(content); 
      infowindow.open(map, marker); 
      lastOpenedInfoWindow = infowindow; 
     }; 
    })(marker, makrerdata[i], infowindow)); 
} 


function closeLastOpenedInfoWindow() { 
    if (lastOpenedInfoWindow) { 
     lastOpenedInfoWindow.close(); 
    } 
} 
0

Asegúrate de tener una instancia de InfoWindow: nueva google.maps.InfoWindow. Por lo tanto, cada vez que se hace clic en el marcador, se abre solo una instancia declarada en su método de inicialización o en InfoWindow declarada globalmente.

var infoWindow = new google.maps.InfoWindow
Asegúrese de que esta ventana de información instanciada solo una vez. De lo contrario, tendrá varias ventanas abiertas cada vez que haga clic en el marcador.

marker.addListener('click', function() {         
    infoWindow.setContent(infowincontent); 
    infoWindow.open(clntLocMap, marker); 
}); 
Cuestiones relacionadas