Вы имеете в виду, что переменная marker
является массивом маркеров?Или вы имеете в виду, что ваш код дублируется для каждого маркера?Потому что, если последнее так, то при каждом вызове addListener this
ссылается на рассматриваемый маркер.
Обновление после комментариев
Хорошо, тогда выможет использовать функцию, которая просто проходит через ваш marker1
:
function setVisible(marker) {
for(var i=0; i<markers1.length; i++) {
if(marker==markers1[i]) {
markers2[i].setVisible(true);
} else {
markers2[i].setVisible(false);
}
}
}
Тогда определение каждого отдельного прослушивателя кликов будет выглядеть так:
google.maps.event.addListener(marker, 'click', function() {
setVisible(this);
});
Однако вы не хотитесделать что-то подобное 10 раз, поэтому вам нужно поместить это в шаблон, подобный следующему:
for(var i=0; i<marker1Data.length; i++) {
marker = new google.maps.Marker({
map: theMap,
position: marker1Data[i].latLng,
visible: true
})
marker1.push(marker);
google.maps.event.addListener(marker, 'click', (function(marker) {
return function() {
setVisible(marker);
}
})(marker));
}
Где marker1Data
- это просто массив объектов LatLng, которые определяют местоположение каждого маркера в marker1
,И, конечно, цикл for для marker2
, но с visible: false
.