2

我正在使用 Leaflet.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() 上得到了异常

Uncaught TypeError: Cannot read property 'classList' of null

有谁知道任何正确的方法来做到这一点?

提前致谢!

4

1 回答 1

2

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

我已经清理了可重现的示例,并在https://playground-leaflet.rhcloud.com/qate/1/edit?html,output留下了一份副本- 我强烈建议您将其变成一个好的错误报告Leaflet.MarkerCluster中。

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

于 2017-01-27T09:40:56.737 回答