2010-08-26 18 views
7

Estoy intentando cargar un mapa de Google con marcadores dinámicos e información dinámica de Windows para ir con ellos. Básicamente, tengo los marcadores funcionando. Las ventanas de información son clicables y se pueden cerrar, sin embargo, no tienen el contenido correcto. Parece que el contenido de cada ventana de información es el último registro que se encuentra en el bucle de consulta. Verá qué está sucediendo here Aquí está el código:Google Maps infoWindow solo cargando el último registro en marcadores

<script type="text/javascript"> 


//Load the Google Map with Options// 
    function initialize() { 
    var myLatlng = new google.maps.LatLng(42.48019996901214, -90.670166015625); 
    var myOptions = { 
     zoom: 6, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    //Begin query loop to set the markers and infoWindow content// 

    <cfoutput query="GetCoord"> 
    var LatLng = new google.maps.LatLng(#Client_Lat#, #Client_Lng#); 

    var marker = new google.maps.Marker({ 
     position: LatLng, 
     map: map, 
     title: "#Client_Company#" 
    }); 

    var contentString = '<p><b>#Client_Company#</b><br>'+ 
         '#Client_Address#<br>'+ 
         '#Client_City#,&nbsp; #Client_State# &nbsp; #Client_Zip#<br>'+ 
         '<a href="member_detail.cfm?ID=#Client_ID#">View Details</a>'; 

    var infowindow = new google.maps.InfoWindow({ 
     content: contentString 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,this); 

    }); 
    </cfoutput> 
    //End query loop 
    } 

</script> 

¿Alguna idea sobre por qué ocurre esto?

+0

En FF3.6.8, obtengo tres mapas ma operadores, que parece correcto en función de la fuente de la página. ¿Con qué navegador estás teniendo problemas? –

+0

Los tres son los marcadores de mapas correctos, pero el contenido de las ventanas de información deben ser diferentes. Los tres son en realidad el contenido que es el último registro en mi consulta de GetCoord. – knawlejj

Respuesta

11

En su código configura estáticamente el contenido ventana de información sobre la carga con

var infowindow = new google.maps.InfoWindow({ 
    content: contentString 
}); 

Luego, cuando se hace clic en sus marcadores que se acaba de abrir esa ventana de información

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

esto va a mostrar el mismo contenido para todos marcador, no quieres esto.


lo que quiere hacer es crear solo una ventana de información sin contenido (antes de su bucle marcador). luego, cuando se hace clic en un marcador, adjunte el contenido a la ventana de información ... luego abra la ventana de información. Esto salvará las líneas de código y hará que la ventana de información se cierre automáticamente.

antes de crear los marcadores (con el bucle) añadir este

infowindow = new google.maps.InfoWindow(); 

en su código de marcador de añadir la llamada infowindow.setContent

google.maps.event.addListener(marker, 'click', function() { 
    infowindow.setContent(contentString); 
    infowindow.open(map,marker); 

}); 
+0

Galen, verifique mi respuesta anterior con un nuevo código. ¡Gracias! – knawlejj

+0

Muchas gracias, estaba enfrentando el mismo problema –

+0

Esto no funcionó para mí. La solución de @ H.M. funcionó a la perfección. El método anterior siguió adjuntando la ventana de información al último marcador en mi ciclo. –

36

Añadir content como una propiedad de objeto marcador y utilizar this.content en el controlador de eventos:

var marker = new google.maps.Marker(options); 
marker.content = '<div>Content goes here....</div>'; 

var infoWindow = new google.maps.InfoWindow(); 
google.maps.event.addListener(marker, 'click', function() { 
           infoWindow.setContent(this.content); 
           infoWindow.open(this.getMap(), this); 
          }); 
+1

Tenía exactamente la misma situación, solo un bucle JS estándar para un resultado JSON proveniente de una solicitud AJAX: para (var i = 0; i firepol

+1

Lo mismo que dijo firepol. Esto funcionó como un encanto, la respuesta aceptada no. –

+2

La respuesta aceptada no funcionó para mí. Esta solución sí. Gracias @ H.M. –

Cuestiones relacionadas