Я пытаюсь создать интерактивные маркеры в картах Google. Вот массив для создания маркеров:Переменная область внутри петель в анонимной функции
var markers = [
{"id":17,"ti":"33 Star Hotel","lat":3.14648,"lng":101.711,"ty":5,"lid":"3","desc":""},
{"id":9,"ti":"Aquaria KLCC","lat":3.15392,"lng":101.713,"ty":10,"lid":"3","desc":""},
{"id":28,"ti":"Batu Ferringhi","lat":5.47436,"lng":100.247,"ty":15,"lid":"4","desc":""},
];
Маркеры добавляются на карту п если маркеры идентификатора местоположения крышки равно п.
При нажатии маркеров, я хочу, чтобы маркеры индекс массива будут отображаться, но все они показывают конечное значение я (markers.length).
function map_center(n) {
for (var i = 0; i < markers.length; i++) {
if (markers[i].lid == n) {
var m = new google.maps.Marker({
position: { lat: markers[i].lat, lng: markers[i].lng },
map: map,
title: markers[i].ti,
icon: icons[markers[i].ty],
});
m.addListener("click", function(){
alert("click:" + i);
});
markers[i].dom = m;
}
}
}
Как-то анонимная функция требует параметр, чтобы получить копию текущего значения я. Я нашел решение здесь на SO, и она работает, но я не люблю передавать параметры таким образом:
var m = new google.maps.Marker({
position: { lat: markers[i].lat, lng: markers[i].lng },
map: map,
title: markers[i].ti,
icon: icons[markers[i].ty],
i: i
});
m.addListener("click", function(){
alert("click:" + this.i);
});
Как это должно быть сделано правильно?
Спасибо @FelixKling! Я не знал причудливых слов, которые закрывали внутри петли! Это то, что я искал! –