Я пытаюсь динамически добавлять и удалять маркеры (нажав на кнопку) с помощью следующего кода:
$("#add-marker").click(function () {
var counter = document.getElementById('add-location-field').lastChild.previousSibling;
counter = Number(counter.getAttribute("counter")) + 1;
var latitude_name = "latitude_"+counter;
var longitude_name = "longitude_"+counter;
$("#add-location-field").append(
"<input name="+latitude_name+" type=\"hidden\" counter="+counter+" id="+latitude_name+ " "+ "step=\"any\" id=\"id_latitude\"/>" +
"<input name="+longitude_name+" type=\"hidden\" counter="+counter+" id="+longitude_name+ " " +"step=\"any\" id=\"id_longitude\"/>"
);
markers[counter-1] = new mapboxgl.Marker({draggable: true
})
.setLngLat([0, 0])
.addTo(map);
map.on('mousemove', function (e) {
//TypeError: markers[(counter - 1)] is undefined
var lng_lat = markers[counter-1].getLngLat();
document.getElementById(longitude_name).value= lng_lat.lng;
document.getElementById(latitude_name).value= lng_lat.lat;
});
markers[counter-1].on('dragend', onDragEnd);
});
Работает нормально при добавлении маркеров и полей, чтобы сохранить значения lat и long для каждый маркер. Однако удаление маркеров с помощью следующего кода приведет к удалению последнего маркера, появлению ошибки и блокированию всех маркеров:
$("#remove-marker").click(function () {
if (markers.length !== 0){
markers[markers.length-1].remove();
markers.splice(0,1);
}
});
, и вот ошибка:
TypeError: markers[(counter - 1)] is undefined
У меня есть уже прочитайте следующие ссылки:
MapBox очистить все текущие маркеры
mapboxgl. Маркер, как удалить
но цель здесь нужно удалить несколько маркеров по одному и обновить массив маркеров по клику.