2010-03-22 13 views
18

Me gustaría llenar un mapa de Google con varios marcadores. Cuando el usuario hace clic en un marcador, me gustaría que envíe al usuario a una página web diferente designada para esa ubicación. (por ejemplo: supongamos que los marcadores representan hogares, cuando hace clic en un marcador lo lleva a una página con más información sobre el hogar)Google Maps Marker Haga clic en Evento

¿Cuál es la forma más sencilla de hacerlo?

Respuesta

20

Deberá adjuntar un detector de eventos a cada marcador. El controlador de clics puede establecer document.location en la URL de la página a la que desea ir.

var marker = new GMarker(location); 
GEvent.addListener(marker, "click", function() { 
    window.location = theURL; 
}); 
map.addOverlay(marker); 

Ya que probablemente va a agregar marcadores en un bucle, tendrá que asegurarse de que cada uno tiene su propia URL. Dado que los cierres mantienen las variables reales a las que acceden (no sus valores), probablemente necesite poner al menos el código addListener en su propia función para crear su propio alcance. El bucle se vería algo así como esto:

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

Gracias por la ayuda! – Mike

+3

Los lectores de esta respuesta deben tener en cuenta que GEvent debe reemplazarse con google.maps.event si está utilizando v3 de la API. Echa un vistazo a la otra respuesta con votos altos! –

51

Creo que a partir de Google Map v3, GEvent no es reconocido, el siguiente trabajó para mí

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

esto funcionó perfectamente para mí también en v3. No sé sobre esos GEvents y tal, eligió este ejemplo primero :) –

+1

Sí, creo que @Mike debería cambiar la respuesta aceptada, ya que la anterior era válida en 2010 – Karol

+1

Este ejemplo no funciona en un bucle debido a los problemas de alcance mencionado en la otra respuesta. – James

Cuestiones relacionadas