2010-03-22 4 views
18

Я хотел бы заполнить карту google несколькими маркерами. Когда пользователь нажимает на маркер, я хотел бы, чтобы он отправил пользователя на другую веб-страницу, предназначенную для этого местоположения. (например: можно сказать, что маркеры представляют дома, когда вы нажимаете на маркер, вы попадаете на страницу с дополнительной информацией о доме)Событие с отображением маркера Google Maps

Каков самый простой способ сделать это?

ответ

20

Вам нужно будет подключить прослушиватель событий к каждому маркеру. Обработчик кликов может установить document.location на URL страницы, к которой вы хотите перейти.

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

Так как вы, вероятно, будете добавлять маркеры в цикле, вам нужно будет убедиться, что каждый из них получает свой собственный URL. Поскольку закрытие хранит фактические переменные, к которым они обращаются (а не их значения), вам, вероятно, необходимо поместить не менее addListener код в свою собственную функцию, чтобы создать свою собственную область. Ваш цикл будет выглядеть вроде этого:

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

Спасибо за помощь! – Mike

+3

Читатели этого ответа должны отметить, что GEvent необходимо заменить на google.maps.event, если вы используете v3 API. Взгляните на другой ответ с высоким голосом! –

51

Я считаю, что на Google Map v3, GEvent не распознан, ниже работал для меня

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

это отлично сработало для меня, а также в версии 3. Не знаю об этих GEvents и т. Д., Сначала выбрал этот пример :) –

+1

Да, я думаю, @Mike должен изменить принятый ответ, поскольку предыдущий был действителен в 2010 году – Karol

+1

Этот пример не работает в цикле из-за проблем с областью упомянутых в другом ответе. – James

Смежные вопросы