停止在Leaflet中传播'click'事件

aga*_*aga 15 javascript leaflet

在我们的项目之一,我们使用Leaflet以及Leaflet.markercluster插件.通过Leaflet查看源代码,我发现它将_collapse()函数附加到地图的click事件中,所以每当我点击地图时它就会收缩先前扩展的集群.
现在,我想禁用此行为.如果群集被扩展,那么我只想取消选择click事件上的所有标记(并且不收缩群集本身).这是我的代码片段:

map.on('click', function(e) {
    scope.deselectAllMarkers();
});
Run Code Online (Sandbox Code Playgroud)

我试图在这个单行回调的末尾添加以下行,以便停止click事件的传播:

scope.L.DomEvent.stopPropagation(e);
scope.L.DomEvent.preventDefault(e);
scope.L.DomEvent.stop(e);
scope.L.DomEvent.stopPropagation(e.originalEvent);
scope.L.DomEvent.preventDefault(e.originalEvent);
scope.L.DomEvent.stop(e.originalEvent);

而且它们都不起作用.隐藏在Leaflet源内部的默认侦听器会在我单击地图时保持其调用.我错过了什么吗?

Kar*_*elG 23

我知道这个答案已经很晚了,但如果有人对解决方案感兴趣,我就是这样解决的.

下面的代码片段是将函数绑定到click事件的示例.

map.on('click', doSomething);
Run Code Online (Sandbox Code Playgroud)

实际上,在检查了传单的API和一些极好的调试后,似乎事件返回一个对象,而不是事件本身.事件本身被包装到返回对象中的字段中.

var doSomething = function(map) {
    // stop propagation
    map.originalEvent.preventDefault();
};
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段时,事件冒泡已停止,这是我想要的,也可能是你想要的.

  • 单击事件上不再有“originalEvent”(现在还有吗?)。 (2认同)

aga*_*aga -1

最后,据我所知,我通过手动删除click调用该方法的默认处理程序解决了这个问题。_collapse()很脏,但它确实起到了作用。