[英]Stop propagation of 'click' event in Leaflet
在我們的一個項目中,我們使用Leaflet
和Leaflet.markercluster
插件。 查看Leaflet
的來源,我發現它將_collapse()
函數附加到地圖的click
事件,因此每當我點擊地圖時,它都會收縮先前擴展的集群。
現在,我想禁用此行為。 如果集群被擴展,那么我只想在click
事件時取消選擇它的所有標記(並且不要收縮集群本身)。 這是我的一段代碼:
map.on('click', function(e) {
scope.deselectAllMarkers();
});
我試圖在這個單行回調的末尾添加以下幾行,以停止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
源中的默認偵聽器都會保持其調用。 我錯過了什么嗎?
我知道這個答案已經很晚了,但是如果有人對解決方案感興趣,這就是我解決的方法。
下面的這個片段是一個將函數綁定到click
事件的例子。
map.on('click', doSomething);
實際上,在檢查了傳單的 API和一些極客調試之后,似乎事件返回了一個對象,而不是事件本身。 事件本身被包裝到返回對象中的一個字段中。
var doSomething = function(map) {
// stop propagation
map.originalEvent.preventDefault();
};
使用上面的代碼片段時,事件冒泡已經停止,這是我想要的,也可能是您想要的。
這個對我有用...
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');
});
最后,據我所知,我通過手動刪除調用_collapse()
方法的默認click
處理程序解決了這個問題。 臟,但它做到了。
您不能從事件處理程序覆蓋事件傳播。 頁面加載后,您需要使用內置的 Leaflet 助手,如下所示:
$('.element').each (i,el)->
L.DomEvent.disableClickPropagation(el);
你有這樣的使用event.stopPropagation()
map.on('click', function(e) { //don't forget to pass this 'e' event parameter
e.preventDefault();
scope.deselectAllMarkers();
e.stopPropagation();
return false;
});
試試這個
1. event.stopPropagation()
2. event.preventDefault()
3. return false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.