Мой первый ответ, по-видимому, не работал, и сейчас я сталкиваюсь с той же проблемой. Вот новый подход:
Leaflet поддерживает событие под названием contextmenu
. Как можно найти в документации к Leaflet здесь .
Срабатывает, когда пользователь нажимает правую кнопку мыши на карте, предотвращает показ контекстного меню браузера по умолчанию, если есть слушатели по этому событию.
Так что теоретически код
marker.on('contextmenu', function(e) {
this.openPopup();
});
должно работать просто отлично. Но, видимо, реализация отстает от документации. В настоящее время (листовка 0.4.5) contextmenu
событие, по- видимому , не все еще поддерживается на маркеры, хотя он отлично работает на объектах полилинии.
Похоже, что работа над этой функцией в ближайшем будущем ведется (см. Обсуждения здесь и здесь ). Так что, я думаю, мы можем только надеяться, что Leaflet быстро поработает над этим и включит событие в следующем выпуске ...
Изменить:
Не обращайте внимания на то, что я сказал о ожидании реализации. Если вы загрузите последнюю ветку разработки и создадите листовку самостоятельно, вы получите полную поддержку contextmenu
событий на маркерах. Удачного кодирования.
фгысин восстановить монику
источник
Попробуйте эту внутреннюю функцию:
Это должно сделать свое дело.
PS Я никогда не обнаруживал это ни в одной документации, но видел, что это используется в патче. Используйте на свой риск. ;)
Изменить: я также нашел эту внутреннюю функцию
Который, кажется, очень похож на
event.preventDefault()
JQuery.источник
L.DomEvent.preventDefault(event);
. Из того, что я видел (глядя на источник Leaflet.js), это должно быть очень похоже на то, чтоpreventDefault()
предоставляет jQuery ... Попробуйте! :)Я случайно нашел решение для остановки мероприятия.
Например, если событие создается следующим образом -
map.on("click", onMapClick);
событие может быть остановлено с помощью этого кода -map.off("click", onMapClick);
источник