Я создал веб-сайт с картой с использованием API JavaScript Карт Google. Я использую PHP для вызова $ строк из базы данных Google BigQuery. Я хочу добавить слушателя ко всем маркерам на карте. В настоящее время любой нажатый маркер переходит к последнему маркеру, как если бы он проходил через все оставшиеся маркеры к последнему маркеру.
foreach ($rows as $row) {
?>
var contentString = "<h1><?php echo str_replace('"', "'", $row['f'][2]['v']); ?></h1>";
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var geolocate = new google.maps.LatLng(<?php echo $row['f'][0]['v']; ?> , <?php echo $row['f'][1]['v']; ?>);
var marker = new google.maps.Marker({
map: map,
position: geolocate,
icon: '/img/Toilet.png',
title: "<?php echo str_replace('"', "'", $row['f'][2]['v']); ?>" //String Replace
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
Я представляю, что marker.addListener нужен указатель на индекс массива, но я не могу разобраться, что мне делать?
Вы можете использовать шаблон IIFE. Пожалуйста, посмотрите на
https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
В этом случае ваш код будет выглядеть примерно так:
<?php
foreach ($rows as $row) {
?>
(function() {
var contentString = "<h1><?php echo str_replace('"', "'", $row['f'][2]['v']); ?></h1>";
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var geolocate = new google.maps.LatLng(<?php echo $row['f'][0]['v']; ?> , <?php echo $row['f'][1]['v']; ?>);
var marker = new google.maps.Marker({
map: map,
position: geolocate,
icon: '/img/Toilet.png',
title: "<?php echo str_replace('"', "'", $row['f'][2]['v']); ?>" //String Replace
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
})();
<?php
}
?>
Других решений пока нет …