2017-07-14 2 views
-1

hinzufügen guten Nachmittag! Ich habe eine Liste von Markern, die auf Google Maps aufgetragen ist, Ich brauche die Adresse zu zeigen, wenn ich auf der Markierung klicken den Code verwendet darunter die Adresse der letzten Markierung zeigtAdresse in der Liste von Google Marker

function updatePontos() { 

     markers = new Array();   
     var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");       
     var arr2 = v.split(","); 

     for (val2 of arr2) { 
      if (val2 != "") { 
       var pts = val2.split(";"); 
       var infowindow = new google.maps.InfoWindow(); 
       var marker = new google.maps.Marker({ 
        position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])}, 
        draggable: false, 
        raiseOnDrag: false, 
        map: map,      
        title: pts[0], 
        icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png' 
       }); 
       google.maps.event.addListener(marker, 'click', function() { 
         infowindow.setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]); 
         infowindow.open(map, this); 
        });          
       markers.push(marker);     
      } 
     }      
    } 

Weiß jemand, Wie zeigt man die Adresse entsprechend dem ausgewählten Marker an?

+0

siehe [Google Maps JS API v3 - Einfache Mehrere Marker Beispiel] Marker (https://stackoverflow.com/questions/3059044/google- maps-js-api-v3-simple-multiple-marker-Beispiel), löst die angenommene Antwort Ihr Problem mit dem Schließen der Funktion. – geocodezip

Antwort

0

Zunächst sieht es so aus, als ob Sie nicht jetzt, was der Umfang von "var" ist. Here ist etwas, das Ihnen helfen sollte.

Sie müssen verstehen, worauf "infowindow" in Ihrem Code zeigt, wenn der Ereignis-Listener ausgeführt wird. Da die Variable nicht bei jeder Iteration der Schleife neu deklariert wird, zeigt sie immer auf das letzte von Ihnen erstellte Infofenster, unabhängig davon, auf welchen Marker Sie klicken. Sie müssen auch die Tatsache nutzen, dass innerhalb des geraden Zuhörers "this" auf den Marker zeigt, auf den der Benutzer geklickt hat.

Um das eigentliche Problem zu lösen, müssen Sie auch closures verstehen.

Dies ist die erste Lösung, die mir in den Sinn kam, es gibt wahrscheinlich eine elegantere Lösung, aber zumindest hat diese eine gewisse Ähnlichkeit mit Ihrem eigenen Code. Ich kann es nicht testen, also lassen Sie mich wissen, ob und wie es scheitert.

function updatePontos() { 

    var markers = []; 
    var infowindows = []; 
    var count = 0;  
    var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");       
    var arr2 = v.split(","); 
    var pts; 

    for (val2 of arr2) { 
     if (val2 != "") { 
      pts = val2.split(";"); 
      infowindows[count] = new google.maps.InfoWindow(); 
      infowindows[count].setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]); 
      markers[count] = new google.maps.Marker({ 
       position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])}, 
       draggable: false, 
       raiseOnDrag: false, 
       map: map, 
       title: pts[0], 
       icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png' 
      }); 
      markers[count]._infoWindowIndex = count; 
      google.maps.event.addListener(markers[count], 'click', function() { 
       infowindows[this._infoWindowIndex].open(map, this); 
      }); 
     } 
     count++; 
    }      
} 

edit: geändert übrig gebliebene Verweise auf Marker [count]

+0

Vielen Dank! Es funktionierte, ich musste nur die 'Marker [count]' in 'var marker' ändern Mein Problem ist jetzt, dass die Ballons nicht schließen. Ich muss einen Weg finden, den letzten offenen Ballon zu schließen. –

+0

Tut mir leid, es hat nicht funktioniert, weil ich einige Verweise auf "Marker" zurückgelassen habe, als ich sie zu "Markers [count]" hätte ändern sollen. Ich habe den Code aktualisiert. – MySidesTheyAreGone

+0

Schau, ich werde brutal sein; Wenn Sie glauben, dass die Verwendung von "var marker" in meinem obigen Code ein gültiger Fix ist, haben Sie nicht das Zeug dazu. Sie müssen JS mehr studieren, ausgehend von den Seiten, die ich verlinkt habe. Tut mir leid, dass ich so unverblümt bin. – MySidesTheyAreGone