У меня был динамический цикл, который создавал infowindows
и маркеры, основанные на том, сколько было введено в CMS, поэтому я не хотел создавать новый InfoWindow()
при каждом щелчке по событию и перегружать его запросами если это когда-либо возникло. Вместо этого я попытался узнать, какая конкретная переменная infowindow
для каждого экземпляра будет выходить за пределы установленного количества мест, которые у меня были, и затем попросить Карты закрыть все из них, прежде чем он откроет правильную.
Мой массив локаций назывался локациями, поэтому PHP, который я установил до , фактическая инициализация карт для получения моих infowindow
имен переменных была:
for($k = 0; $k < count($locations); $k++) {
$infowindows[] = 'infowindow' . $k;
}
Затем после инициализации карты и т. Д. В скрипте у меня был цикл PHP foreach
, создающий окна динамической информации с использованием счетчика:
//...javascript map initilization
<?php
$i=0;
foreach($locations as $location) {
..//get latitudes, longitude, image, etc...
echo 'var mapMarker' . $i . ' = new google.maps.Marker({
position: myLatLng' . $i . ',
map: map,
icon: image
});';
echo 'var contentString' . $i . ' = "<h1>' . $title[$i] . '</h1><h2>' . $address[$i] . '</h2>' . $content[$i] . '";';
echo 'infowindow' . $i . ' = new google.maps.InfoWindow({ ';
echo ' content: contentString' . $i . '
});';
echo 'google.maps.event.addListener(mapMarker' . $i . ', "click", function() { ';
foreach($infowindows as $window) {
echo $window . '.close();';
}
echo 'infowindow' . $i . '.open(map,mapMarker'. $i . ');
});';
$i++;
}
?>
...//continue with Maps script...
Итак, прежде чем я вызвал весь скрипт карты, у меня был массив с именами, которые, как я знал, должны были быть выведены при создании InfoWindow()
, например, infowindow0, infowindow1, infowindow2, etc...
Затем, в событии click
для каждого маркера, цикл foreach
проходит и говорит закрыть все из них, прежде чем выполнить следующий шаг их открытия. Получается так:
google.maps.event.addListener(mapMarker0, "click", function() {
infowindow0.close();
infowindow1.close();
infowindow2.close();
infowindow0.open(map,mapMarker0);
}
Я полагаю, просто другой способ делать вещи, но я надеюсь, что это кому-то поможет.