17

私たちのプロジェクトの 1 つで、プラグインLeafletと一緒に使用しています。Leaflet.markerclusterのソースを調べると、マップのイベントに関数がLeaflet追加されていることがわかりました。そのため、マップをクリックするたびに、以前に展開されたクラスターが縮小されます。 ここで、この動作を無効にしたいと思います。クラスターが展開されている場合は、イベントですべてのマーカーの選択を解除したいだけです(クラスター自体を収縮させません)。これが私のコードの一部です: _collapse()click
click

map.on('click', function(e) {
    scope.deselectAllMarkers();
});

clickイベント の伝播を停止するために、この 1 行のコールバックの最後に次の行を追加しようとしました。

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、マップをクリックするたびに呼び出しを保持します。何か不足していますか?

4

6 に答える 6

28

この回答がかなり遅れていることはわかっていますが、誰かが解決策に興味を持っている場合は、ここで私が解決した方法を示します。

click以下のこのスニペットは、関数をイベントにバインドする例です。

map.on('click', doSomething);

実際、リーフレットの APIとマニアックなデバッグを確認した後、イベント自体ではなく、イベントがオブジェクトを返すようです。イベント自体は、返されたオブジェクト内のフィールドにラップされます。

var doSomething = function(map) {
    // stop propagation
    map.originalEvent.preventDefault();
};

上記のスニペットを使用すると、イベントのバブリングが停止しました。私が欲しかったものであり、おそらくあなたが欲しかったものです。

于 2014-03-17T10:23:50.787 に答える
0

イベント ハンドラーからのイベントの伝達をオーバーライドすることはできません。次のように、ページが読み込まれた後に組み込みの Leaflet ヘルパーを使用する必要があります。

$('.element').each (i,el)->

  L.DomEvent.disableClickPropagation(el);
于 2015-02-12T18:33:39.270 に答える
-1

最後に、私が覚えている限り、メソッドを呼び出していたデフォルトclickハンドラーを手動で削除することで問題を解決しました。_collapse()汚いですが、それはうまくいきました。

于 2014-04-08T09:09:56.743 に答える
-3

このような使い方があります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

于 2013-09-04T08:12:09.607 に答える