Клуб API Карт

По поводу балуна

Пост в архиве.

Ребята, подскажите, пожалуйста.

Вот если у меня есть обработчик (клик) на карте

YMaps.Events.observe(map, map.Events.Click, function(map, point) {

  alert('click')

})

и, допустим, какая-нибудь метка

var marker = new YMaps.Placemark(map.getCenter())

marker.description = 'description'

map.addOverlay(marker)


Если я нажму на маркер, появится балун, событие-клик на карте не сработает.

И если, покликать по самому балуну, событие-клик опять же не сработает - что есть правильно.


Но если я делаю свой слой балуна для метки с помощью:

new YMaps.LayoutTemplate и new YMaps.Style

(как пример - http://api.yandex.ru/maps/jsapi/examples/mapballoonlayout.html)

то нажатие по балуну приводит к событию клик на карте (map.Events.Click).


Как можно запретить клик-событие карты, если на самом деле нажат балун?


4 комментария
Чисто предположение, без особово вникания - поставить z-index повыше.
Sergey Konstantinov
28 января 2016, 07:56
Нужно ловить событие мыши и останавливать его, например так (если используется jQuery):

jQuery(element).bind('click', function (e) { e.stopPropagation(); } );

На счет jQuery или обычным способом - это понятно.

Но ведь в YMaps есть своя поддержка событий, в ней можно останавливать "всплытие"?

Вот простой пример, допустим, есть карта и метка, и вешаем события на них

YMaps.Events.observe(map, map.Events.Click, function() {

  alert('click map')

})

YMaps.Events.ovserve(placemark, placemark.Events.Click, function() {

  alert('click placemark')

})

Понятно, что если нажать на метку, сначала сработает 'click placemark', а за ним 'click map'.

Но как в таком случае остановить событие на метке?

Sergey Konstantinov
28 января 2016, 07:56
Попробуйте так:

YMaps.Events.ovserve(placemark, placemark.Events.Click, function(pm, event) {


    event.preventMapEvent();


})