Google Maps Infofenster.setContent als ein DOM-element mit jQuery scheint, funktioniert nur einmal?
Ich bin immer sehr frustriert und ich hoffe, dass hier jemand helfen kann. Ich habe eine Karten-app, wo gibt es mehrere Marker auf den Karten, die mit infoWindows, deren Inhalte regelmäßig aktualisiert. Meine Lösung war die Stelle, die divs, die in dem Infofenster in dem DOM, in einer versteckten Containers, der aktualisiert werden kann mein updater-code im hintergrund. Dann verwende ich eine einzige Infofenster und einfach die Inhalte auf das DOM-element mit dem Abfrage:
google.maps.event.addListener(marker, 'click', function(){
infoWindow.setContent($(#"+id+"-window-content)[0]);
infoWindow.open(map, marker);
}
Das Ding Super funktioniert... einmal. Dann wird es nicht wieder öffnen für das, maker. Ich habe bemerkt, dass wenn ich das Fenster öffnen auf einen marker (Marker A), und dann schließen Sie es und öffnen Sie es dann auf einem anderen maker (Marker B), und dann gehen Sie zurück zu der Markierung Ein, das Fenster erscheint neben der Markierung Ein, aber mit Marker B content.
Nicht warum mein script den Inhalt des DOM-Elements ein zweites mal... Es ist fast wie mit dem jQuery-Selektor ist, löschen Sie das element aus dem DOM.
Cheers,
whiteatom
Hallo nochmal,
Stellt sich heraus, ich kann meine Frage selbst beantwortet, als ich versuchte um Sie hier zu erklären.
Übergabe eines DOM-Elements auf die setContent () - Funktion scheint tatsächlich entfernen Sie Sie aus dem DOM und stellen Sie es in das Infofenster, sodass ich das nächste mal versuchen, und nehmen Sie es, es ist nicht mehr da. Mein fix war, fügen Sie einen clone() in der jQuery-Aufruf und es scheint zu funktionieren jetzt.
google.maps.event.addListener(marker, 'click', function(){
infoWindow.setContent($(#"+id+"-window-content).clone()[0]);
infoWindow.open(map, marker);
}
Kann das jemand bestätigen, ist das Verhalten der setContent, wenn ein DOM-element übergeben wird? ist dies der beste Weg, dies zu behandeln?
Cheers,
whiteatom
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie ein element das übergeordnete Element in den DOM, wird das element verschoben, nicht kopiert.
Also ich würde davon ausgehen, diese Zeile...
Entfernen Sie das element "#id-Fenster-Inhalt" von seiner ursprünglichen Stellung.
Wenn das Infofenster geschlossen ist, wird das DOM-element ist, wird es verworfen.
So, wenn Sie auf eine Sekunde Zeit, einen marker, der das element nicht mehr existiert.
Versuchen, duplizieren Sie das element oder die Lieferung einer HTML-string, um das Infofenster.
Hoffe, das hilft
Es wurde sogar noch komplizierter, weil ich hatte die tabs (mit den jQuery Tools) in den infoWindows und ein Klon (auch mit tiefen Kopie von Ereignissen und Daten - clone(true, true)) schien nicht zu wollen, Sie zu tragen über... die Tabletten waren tot im Infofenster.
Also.. ich bin das verschieben der div, wie ich ursprünglich und verschieben es dann wieder zurück, bevor ich die neuen Infofenster Inhalt:
Ich denke, das hat auch den Vorteil, dass mein updater-script zu aktualisieren Sie einfach die #"+id+"-Fenster-Inhalts-div und es wird auch aktualisieren Sie das Infofenster während der öffnungszeiten 🙂
Danke für Eure Hilfe...
getContent()
Anruf nach derinfoWindow.close()
funktionieren würde. Ich hatte erwartet, die Dinge gelöscht aus dem DOM nach dem close(). Aber anscheinend funktioniert es!