У меня есть карта со многими (> 100) маркерами. Я хотел бы сделать так, чтобы при щелчке по этим значкам менялась иконка с выделенной версией. Я создал две пользовательских иконки, одну обычную и одну выделенную. Я получил это для работы с одиночными маркерами, но не могу найти способ настроить его, чтобы каждый значок можно было изменить, нажав на него.
Вот рабочий код для одной иконки:
var testmarker = L.marker([44.0, -73.0], {icon: unselectedIcon});
testmarker.on('click', function(e) {
testmarker.setIcon(selectedIcon);
});
Однако у меня есть много маркеров, и я использую цикл для их размещения:
//points is a 2 dim array with lat/long pairs
for (i = 0; i <= points.length-1; i++) {
var marker = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon});
}
marker.on('click', function(e) {
marker.setIcon(selectedIcon);
});
Я попытался дать каждому маркеру уникальное имя переменной с помощью массива:
for (i = 0; i <= points.length-1; i++) {
testmarker[i] = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon});
testmarker[i].on('click', function(e) {
alert(e.latlng); e.setIcon(selectedIcon);
});
}
Что просто дает мне «неопределенный» в предупреждении.
Изменение testmarker[i].on
в this.map.on
только дает предупреждение о нажатии на карте (без изменений значка).
Изменение всей этой строки на:
testmarker[i].on('click', function(e) {
alert(e.latlng); testmarker[i].setIcon(selectedIcon);
});
Изменяет последний (при нажатии любой из них), одновременно выдавая неопределенное предупреждение.
Как я могу установить маркеры так, чтобы каждый из них мог быть изменен индивидуально одним щелчком мыши, но без использования сотен повторяющихся блоков кода для каждого?