Содержимое маркера (infoWindow) Карты Google
Я пытаюсь добавить infoWindow к нескольким маркерам на карте Google. Ближайший я пришел, чтобы получить infoWindow, чтобы отобразить последний адрес, который вы можете увидеть в массиве, на всех маркерах. Бит кода, который я вставлял ниже, не работает, я получаю сообщение "Uncaught TypeError: Не могу прочитать свойство" 4 "из undefined". Я уверен, что это проблема с областью, но я собираюсь по кругу здесь и могу сделать с некоторой помощью:
var hotels = [
['ibis Birmingham Airport', 52.452656, -1.730548, 4, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3AW','(+44)1217805800','(+44)1217805810','[email protected]','http://www.booknowaddress.com'],
['ETAP Birmingham Airport', 52.452527, -1.731644, 3, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3QL','(+44)1217805858','(+44)1217805860','[email protected]','http://www.booknowaddress.com'],
['ibis Birmingham City Centre', 52.475162, -1.897208, 2, 'Ladywell Walk<br />Birmingham<br />B5 4ST','(+44)1216226010','(+44)1216226020','[email protected]','http://www.booknowaddress.com']
];
for (var i = 0; i < hotels.length; i++) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(hotels[i][1], hotels[i][2]),
map: map,
icon: image,
title: hotels[i][0],
zIndex: hotels[i][2]
});
var infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(marker, 'click', function () {
var markerContent = hotels[i][4];
infoWindow.setContent(markerContent);
infoWindow.open(map, this);
});
}
Спасибо в ожидании.
Ответы
Ответ 1
Мы решили это, хотя мы и не думали, что addListener за пределами the for будет иметь какое-то значение, похоже. Вот ответ:
Создайте новую функцию с вашей информацией для инфо-окна в ней:
function addInfoWindow(marker, message) {
var infoWindow = new google.maps.InfoWindow({
content: message
});
google.maps.event.addListener(marker, 'click', function () {
infoWindow.open(map, marker);
});
}
Затем вызовите функцию с идентификатором массива и маркером, который вы хотите создать:
addInfoWindow(marker, hotels[i][3]);
Ответ 2
Хотя на этот вопрос уже был дан ответ, я думаю, что этот подход лучше:
http://jsfiddle.net/kjy112/3CvaD/ извлечь из этого вопроса на StackOverFlow google maps - открыть маркер infowindow с учетом координат:
Каждый маркер получает запись "infowindow":
function createMarker(lat, lon, html) {
var newmarker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lon),
map: map,
title: html
});
newmarker['infowindow'] = new google.maps.InfoWindow({
content: html
});
google.maps.event.addListener(newmarker, 'mouseover', function() {
this['infowindow'].open(map, this);
});
}