2010-03-22 41 views
18

Ich möchte eine Google Map mit mehreren Markern füllen. Wenn der Benutzer auf eine Markierung klickt, möchte ich, dass er den Benutzer an eine andere Webseite sendet, die für diese Position bestimmt ist. (Beispiel: sagen wir, die Markierungen stellen Häuser dar, wenn Sie auf einen Marker klicken, gelangen Sie auf eine Seite mit weiteren Informationen über das Heim)Google Maps Marker Click Event

Was ist der einfachste Weg, dies zu tun?

Antwort

20

Sie müssen jedem Marker einen Ereignis-Listener hinzufügen. Der Click-Handler kann document.location auf die URL der Seite festlegen, zu der Sie wechseln möchten.

Da Sie wahrscheinlich Marker in einer Schleife hinzufügen werden, müssen Sie sicherstellen, dass jeder seine eigene URL erhält. Da Closures die tatsächlichen Variablen behalten, auf die sie zugreifen (nicht ihre Werte), müssen Sie wahrscheinlich mindestens addListener Code in eine eigene Funktion schreiben, um einen eigenen Bereich zu erstellen. Ihre Schleife Art würde wie folgt aussehen:

function createMarker(location, url) { 
    var marker = new GMarker(location); 
    GEvent.addListener(marker, "click", function() { 
     window.location = url; 
    }); 
    return marker; 
} 

// Assuming locations is an array of objects with lat, lng, and url properties 
for (var i = 0; i < locations.length; i++) { 
    var loc = locations[i]; 
    map.addOverlay(createMarker(new GLatLng(loc.lat, loc.lng), loc.url)); 
} 
+0

Danke für die Hilfe! – Mike

+3

Leser dieser Antwort sollten beachten, dass GEvent durch google.maps.event ersetzt werden muss, wenn Sie v3 der API verwenden. Schau dir die andere Antwort mit hohen Stimmen an! –

51

Ich glaube, dass, wie von google map v3, GEvent nicht erkannt wird, arbeitete die folgenden für mich

google.maps.event.addListener(marker, "click", function() { 
    window.location = url; 
}); 
+0

das funktionierte perfekt für mich auch in v3. Ich weiß nicht, über diese GEvents und solche, wählte dieses Beispiel zuerst :) –

+1

Ja, ich denke, @Mike sollte die angenommene Antwort ändern, wie vorherige 2010 gültig war – Karol

+1

Dieses Beispiel funktioniert nicht in einer Schleife aufgrund der Umfang Probleme in der anderen Antwort erwähnt. – James