Leaflet 更改所有标记的拖动状态

Leaflet 更改所有标记的拖动状态,leaflet,leaflet.markercluster,Leaflet,Leaflet.markercluster,我正在使用传单.markercluster 1.0.1 我正在尝试在地图上添加按钮,以便用户可以进入“编辑模式”。单击该按钮,它将切换所有标记的拖动状态。我真的不知道如何正确地实现它,但我编写了这段代码 var drag = false; $('#button').on('click', function () { drag = !drag; markers.eachLayer(function (marker) { marker.options.draggabl

我正在使用传单.markercluster 1.0.1

我正在尝试在地图上添加按钮,以便用户可以进入“编辑模式”。单击该按钮,它将切换所有标记的拖动状态。我真的不知道如何正确地实现它,但我编写了这段代码

var drag = false;
$('#button').on('click', function () {
    drag = !drag;
    markers.eachLayer(function (marker) {
        marker.options.draggable = drag;
        if (marker.dragging) {
            drag ? marker.dragging.enable() : marker.dragging.disable();
        }
    });
});
它工作了一段时间,但在.enable()上出现异常

有人知道这样做的正确方法吗


提前谢谢

似乎
MarkerClusterGroup
中的
forEach
方法的逻辑在拖动SPIDERIZED标记后,会遍历地图上不可见的标记。然后,启用拖动的逻辑失败,因为标记没有图标实例,因为它已从地图中删除

我已经清理了一点可复制的示例,并在上留下了一份副本-我强烈建议您在中将其转换为


您还可以检查每个标记是否有
标记。_map
私有属性检查它们是否在地图上,并跳过那些不在地图上的标记,但是这可能会导致其他问题。

你能用
传单src.js
而不是
传单js
运行你的代码,并从错误中获得完整的堆栈跟踪吗?@IvanSanchez复制步骤:单击“hi”,单击集群(2),稍微移动一个标记,确保它们将再次折叠到集群(2)中,“hi”,然后单击“hi”导致例外我忘了包括传单src:)已更新
Uncaught TypeError: Cannot read property 'classList' of null