google maps api - перезатирается event "click" для маркеров
!В цикле создаются маркеры. В следующем цикле навешиваются события "click" на каждый маркер. Но в итоге для всех маркеров будет событие "click" заданное последнему маркеру - "marker: 3"
Подскажите кто знает - в чем проблема и как исправить?
<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var mapProp = {
center:new google.maps.LatLng(50.456501,30.559033),
mapTypeId:google.maps.MapTypeId.ROADMAP,
zoom:12,
scaleControl: true
};
var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
//создаем маркеры
var markers =[[50.468077,30.562216],[50.459307,30.536864],[50.442119,30.578020]];
var LatLng; var marker = [];
for (i=0; i<markers.length; i++){
LatLng = {lat: markers[i][0], lng: markers[i][1]};
marker[i] = new google.maps.Marker({
position: LatLng,
map: map
});
}
//навешиваем событие "click" на каждый маркер
for (i=0; i<marker.length; i++) marker[i].addListener("click",function(event){alert('marker: '+i)});
}
</script>
</head>
<body>
<div id="googleMap" style="width:500px;height:400px; position: absolute; left: 0; right:0; margin: auto;"></div>
</body>
<script type="text/javascript">initialize();</script>
</html>
|
addListener - это аналог addEventListener из какого-то фреймворка или ошибка? :)
|
Цитата:
Пример для одного маркера https://developers.google.com/maps/d...t-simple?hl=ru |
Тут вся беда в цикле. addListener берет значение из i для каждого маркера уже после выполнения скрипта. i к этому времени неизменна 3. Так и получается что у всех обработчиков одинаковый номер :)
|
В общем нашел решение - надо код
//навешиваем событие "click" на каждый маркер
for (i=0; i<marker.length; i++) marker[i].addListener("click",function(event){alert('marker: '+i)});
заменить на
//навешиваем событие "click" на каждый маркер
for (i=0; i<marker.length; i++){
marker[i]["i"] = i;
marker[i].addListener("click",function(){alert('marker: '+this.i)});
}
|
shurik_shink,
использовать не for а forEach и прочитать Пример ошибочного использования |
shurik_shink,
Нашел похожее решение
<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var mapProp = {
center: new google.maps.LatLng(50.456501, 30.559033),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 12,
scaleControl: true
};
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
//создаем маркеры
var markers = [[50.468077, 30.562216], [50.459307, 30.536864], [50.442119, 30.578020]];
var LatLng; var marker = [];
for (i = 0; i < markers.length; i++) {
LatLng = { lat: markers[i][0], lng: markers[i][1] };
marker[i] = new google.maps.Marker({
position: LatLng,
map: map,
index: i
});
}
//навешиваем событие "click" на каждый маркер
var message = ['marker:0','marker:1','marker:2','marker:3','marker:4','marker:5'];
for (i = 0; i < marker.length; i++) marker[i].addListener("click", function (event) { alert(message[this.index]) });
}
</script>
</head>
<body>
<div id="googleMap" style="width:500px;height:400px; position: absolute; left: 0; right:0; margin: auto;"></div>
</body>
<script type="text/javascript"> initialize();</script>
</html>
|
| Часовой пояс GMT +3, время: 20:34. |