2017-07-23 5 views
1

Ich bin in der Lage, 4 Infofenster nach der Antwort zu erstellen, jetzt ist die Aufgabe, den Wert im Infofenster auf Klick auf eine Schaltfläche, die im Infofenster ist und schließen Sie es ändern. Der Wert ändert sich erfolgreich, aber wenn das Infofenster erneut geöffnet wird, wird die frühere Instanz von Infofenster geladen und nicht die neue.laden neue Infofenster auf Wertänderung

Im Erstellen des Markers und Infowindow in $ .each Schleife und während debug iv dachte, dass, wenn der Marker angeklickt wird es in diese $ .each-Schleife, wo der Listener angeschlossen ist und alte Werte hat. Das Problem ist das Öffnen einer neuen Infowindow-Instanz beim Klicken und nicht das Laden der einzelnen Schleifen.

$.each(obj,function(i,value){ 
    var eventmarker = new google.maps.Marker; 
    eventmarker.setPosition(new google.maps.LatLng(parseFloat(value.Latitude),parseFloat(value.Longitude))); 
    eventmarker.setMap(mymapper); 
    listener = eventmarker.addListener("click",function(){ 
    infoWindow = new google.maps.InfoWindow; 
    var content = value; 
    infoWindow.setContent(content); 
    infoWindow.open(mymapper,eventmarker); 
}); 
+0

Können Sie etwas Code posten? Wenn ich mich richtig erinnere, können Sie nur eine Instanz von Infowindow haben. –

+0

haben den Code geteilt. Die Map wird außerhalb von $ .each erstellt und der Infowindow-Inhalt hat eine Schaltfläche beim Klicken, deren Wert sich erfolgreich ändert, aber wenn ich das Fenster schließe und erneut auf Marker klicke, geht es in die $ .each-Datei und öffnet dasselbe alte Infofenster – Archit02

Antwort

0

Versuchen infoWindow Außenseite jeder Schleife wie dies die Erstellung und Code setzen Marker innerhalb Verschluß zu schaffen. Ich habe Arbeits Geige für Sie: http://jsfiddle.net/6973rbL8/

function initialize() { 

var myOptions = { 
    center: new google.maps.LatLng(16,15), 
    zoom: 4, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
var myMapper = new google.maps.Map(document.getElementById("default"), 
       myOptions); 
var infowindow = new google.maps.InfoWindow(); 

var obj=[{Latitude:16,Longitude:15},{Latitude:16,Longitude:14}, 
{Latitude:16,Longitude:1}] 

$.each(obj,function(i,value){ 
     var eventmarker = new google.maps.Marker; 
     eventmarker.setPosition(new 
google.maps.LatLng(parseFloat(value.Latitude),parseFloat(value.Longitude))); 
eventmarker.setMap(mymapper); 
}); 


} 
+0

nein Vlado iv hat versucht, dass es nicht funktioniert. ich bekomme das gleiche Ergebnis – Archit02

+0

Danke Vlado. aber doch gleich. Das Problem, das ich sehe, ist, dass der Eventlistner innerhalb der Schleife $ .each ist und das Infofenster die Daten (Inhalt) der einzelnen Schleifeniterationen verwendet, die nicht aktualisiert werden, daher werden immer die nicht aktualisierten Daten gesehen. – Archit02

+0

Dann zeigen Sie mehr Code. Wo ist die Inhaltsvariable definiert? Was ist erwartetes Verhalten (Ergebnis)? –

0

Danke für die Mühe Vlado wirklich zu schätzen.
Ich kann das gewünschte Ergebnis erhalten, indem ich den Code von InfoWindow in eine neue Funktion setze und diese Funktion in der $ .each-Schleife aufruft. Die Funktion benötigt drei Parameter Wert (Inhalt), Marker und Map. Innerhalb der Funktion, die den Inhalt bei jedem Aufruf erzeugt, wird sichergestellt, dass der neue Inhalt auf das Infowindow gesetzt wird, das ich global außerhalb jeder Schleife deklariert habe. Also bei jedem Klick auf die Schaltfläche ima nur den Wert in der globalen Variable der Antwort aktualisieren und dieses neue val in der Funktion verwenden, um infowindow zu aktualisieren.