Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 停止传播';单击';活动简介_Javascript_Leaflet - Fatal编程技术网

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');
});