2010-08-26 22 views
7

Sto provando a caricare una mappa di google con indicatori dinamici e informazioni dinamiche per andare con loro. Fondamentalmente ho i marcatori funzionanti. Le finestre di informazione sono cliccabili e chiudibili, tuttavia non hanno il contenuto corretto. Sembra che il contenuto di ogni informazioneWindow sia l'ultimo record che si trova nel ciclo di query. Si vedrà che cosa sta accadendo here Ecco il codice:Informazioni su Google MapsWindow che carica solo l'ultimo record sui marcatori

<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> 

Tutte le idee su perché questo sta accadendo?

+0

In FF3.6.8, ottengo tre mappe ma rkers, che appare corretto in base all'origine della pagina. Con quale browser hai problemi? –

+0

Questi tre sono gli indicatori di mappa corretti, ma il contenuto di infoWindows DOVREBBE essere diverso. Tutti e tre sono in realtà il contenuto che è l'ultimo record nella mia query GetCoord. – knawlejj

risposta

11

Nel codice si imposta in modo statico il contenuto infowindow su carico con

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

Poi quando i marcatori sono cliccato si sta appena aprendo che infowindow

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

questo verrà visualizzato lo stesso contenuto per ogni marcatore, tu non vuoi questo.


quello che vuoi fare è creare solo una finestra di apertura senza contenuto (prima del tuo loop di marker). quindi, quando viene cliccato un marcatore, allegare il contenuto alla finestra informativa ... quindi aprire la finestra di apertura. Ciò salverà le linee di codice e farà chiudere automaticamente il infowindow.

prima di creare i tuoi marcatori (con il loop) aggiungere questo

infowindow = new google.maps.InfoWindow(); 

nel codice marcatore aggiungere la chiamata infowindow.setContent

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

}); 
+0

Galen, controlla la mia risposta sopra con un nuovo codice. Grazie! – knawlejj

+0

Grazie mille, stavo affrontando lo stesso problema –

+0

Questo non ha funzionato per me. La soluzione di @ H.M. ha funzionato perfettamente. Il metodo sopra continuava ad allegare il infowindow all'ultimo marcatore nel mio loop. –

36

Aggiungi content come una proprietà di oggetto marcatore e utilizzare this.content nel gestore dell'evento:

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

Aveva esattamente la stessa situazione, solo un ciclo JS standard per un risultato JSON proveniente da una richiesta AJAX: per (var i = 0; i firepol

+1

Lo stesso che ha detto firepol. Questo ha funzionato come un fascino, la risposta accettata no. –

+2

La risposta accettata non ha funzionato per me. Questa soluzione ha fatto. Grazie @ H.M. –

Problemi correlati