Moja pierwsza odpowiedź najwyraźniej nie zadziałała, a ponieważ mam teraz ten sam problem. Oto nowe podejście:
Ulotka obsługuje wydarzenie o nazwie contextmenu
. Jak stwierdzono w dokumentacji wydarzenia Ulotki tutaj .
Uruchamiany, gdy użytkownik naciśnie prawy przycisk myszy na mapie, uniemożliwia wyświetlenie domyślnego menu kontekstowego przeglądarki, jeśli na tym wydarzeniu znajdują się nasłuchiwacze.
Więc teoretycznie kod
marker.on('contextmenu', function(e) {
this.openPopup();
});
powinien działać dobrze. Ale najwyraźniej implementacja pozostaje w tyle za dokumentacją. Na razie (ulotka 0.4.5) contextmenu
zdarzenie najwyraźniej nie jest jeszcze obsługiwane na znacznikach, chociaż działa idealnie doskonale na obiektach polilinii.
Wydaje się, że trwają prace nad udostępnieniem tej funkcji w najbliższej przyszłości (patrz dyskusje tutaj i tutaj ). Sądzę więc, że możemy mieć tylko nadzieję, że Ulotka szybko nad tym zadziała i umożliwi wydarzenie w następnej wersji ...
Edycja:
zignoruj to, co powiedziałem o czekaniu na wdrożenie. Jeśli pobierzesz najnowszą gałąź rozwoju i sam zbudujesz ulotkę, uzyskasz pełne wsparcie dla contextmenu
wydarzeń dotyczących markerów. Szczęśliwego kodowania.
fgysin przywraca Monikę
źródło
Wypróbuj tę funkcję wewnętrzną:
To powinno wystarczyć.
PS Nigdy nie znalazłem tego w żadnej dokumentacji, ale widziałem go używanego w łatce. Używaj na własne ryzyko. ;)
Edycja: Znalazłem również tę funkcję wewnętrzną
Który wydaje się być bardzo podobny do tego,
event.preventDefault()
który znajduje się w jQuery.źródło
L.DomEvent.preventDefault(event);
. Z tego, co widziałem (patrząc na źródło Leaflet.js), powinno to być bardzo podobne dopreventDefault()
dostarczonego przez jQuery ... Wypróbuj! :)Nawiasem mówiąc, mam rozwiązanie problemu zatrzymania zdarzenia.
Na przykład, jeśli zdarzenie jest tworzone w ten sposób -
map.on("click", onMapClick);
zdarzenie można zatrzymać za pomocą tego kodu -map.off("click", onMapClick);
źródło