Javascript 停止传播';单击';活动简介
在我们的一个项目中,我们正在使用Javascript 停止传播';单击';活动简介,javascript,leaflet,Javascript,Leaflet,在我们的一个项目中,我们正在使用传单以及传单.markercluster插件。通过查看传单的来源,我发现它将\u collapse() 现在,我想禁用此行为。如果集群已展开,那么我只想在单击事件时取消选择其所有标记(并且不要收缩集群本身)。以下是我的代码: map.on('click', function(e) { scope.deselectAllMarkers(); }); 我尝试在这一行回调的末尾添加以下行,以停止单击事件的传播: scope.L.DomEvent.stopPro
传单
以及传单.markercluster
插件。通过查看传单
的来源,我发现它将\u collapse()
现在,我想禁用此行为。如果集群已展开,那么我只想在单击事件时取消选择其所有标记(并且不要收缩集群本身)。以下是我的代码:
map.on('click', function(e) {
scope.deselectAllMarkers();
});
我尝试在这一行回调的末尾添加以下行,以停止单击事件的传播:
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)代码>
而且它们都不起作用。默认侦听器隐藏在传单
源中,每当我单击地图时,它都会保持其调用。我遗漏了什么吗?你有这样的用法吗
试试这个
1.event.stopPropagation()
2.event.preventDefault()
3.我知道这个答案已经很晚了,但如果有人对解决方案感兴趣,下面是我如何解决的
下面的代码段是一个将函数绑定到click
事件的示例
map.on('click', doSomething);
实际上,在检查和一些古怪的调试之后,事件似乎返回了一个对象,而不是事件本身。事件本身被包装到返回对象内的字段中
var doSomething = function(map) {
// stop propagation
map.originalEvent.preventDefault();
};
使用上述代码段时,事件冒泡已经停止,这是我想要的,可能也是您想要的。最后,我通过手动删除默认的单击处理程序解决了这个问题,据我所知,该处理程序调用了\u collapse()
方法。脏,但它成功了。您不能从事件处理程序重写事件传播。加载页面后,需要使用内置传单帮助器,如下所示:
$('.element').each (i,el)->
L.DomEvent.disableClickPropagation(el);
这个对我有用
var div = L.DomUtil.get('div_id');
if (!L.Browser.touch) {
L.DomEvent.disableClickPropagation(div);
L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);
} else {
L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);
}
多亏了我知道这个答案已经很晚了,但正如在jquery中一样,您可以使用.off
map.on('click', doSomething);
map.off('click');
它适用于任何传单活动
我将其用于只触发一次的'zoomend'
事件
map.on('moveend', function(e){
console.log("any code");
map.off('moveend');
});
我都试过了,运气不好L.DomEvent.preventDefault(e)
和L.DomEvent.stopPropagation(e)
分别调用e.preventDefault()
和e.stopPropagation()
。您是否尝试了自己的答案?map.on('click'没有通过标准事件对象。你最终找到了解决方案吗?click事件上没有originalEvent
。@MatthieuBrucher你确定吗?我刚刚查看了传单的文档,最好检查该对象是否是MouseEvent
对象(因此不是其他对象)嗯,有趣的是,我在调试传单生成的事件时从未见过这个家伙。也许是一种找到哪些是生成事件,哪些是用户事件的方法!
map.on('moveend', function(e){
console.log("any code");
map.off('moveend');
});