Клуб API Карт

как создать пользовательский обработчик событий в балуне?

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

дано:

1. создаю простой placemark с html контентом

group1.add(new ymaps.Placemark([55.804019,37.496133], {
 id: 'group-1-7',
 balloonContentHeader: '<div class="baloon_adr">Панфилова, д.5 и д.12</div><div class="baloon_tel">(495) 949-99-99</div>',
 balloonContentBody: '<div class="balloon_cont_left"><ul><li>Русская баня</li><li>Финская баня</li></ul></div>',
 balloonContentFooter: '<span id="route_here" >Проехать сюда</span><a href="/address/usadba-na-panfilova">Страница комплекса</a>',
 hintContent: 'Усадьба на Панфилова'},{
 preset: "myicon1", 
})); 

 

2. теперь я хочу что бы по клику на <span id="route_here" >Проехать сюда</span> у меня происходило какое то js событие . например alert

соответвенно я пишу-

$('#route_here').click(function(){
   alert('sdf');
});

- но ничего не происходит,

причем если тот же js вставить в консоле firebug'a, то событие отлавливается, если в коде , то нет

перепробовал кучу вариантов как поймать это событие, но ничего не получается.

 

подскажите как быть, и как же его отловить ?

5 комментариев

Потому что html-код балуна будет вставлен в DOM-дерево только когда балун будет открыт. До этого его в DOM-дереве нет.

Посмотрите этот пример из блога.

 

как я правильно понимаю, тогда можно ли добавить тот же прослушиватель когда балун откроется,т.е

group1.events.add('click', openBalloon);                    
function openBalloon(e){

$('#route_here').click(function(){
   alert('sdf');
});

}

 

??

не совсем, т.к. по клику он не откроется.

нужно слушать "balloonopen" и еще по "balloonclose" снимать слушателя.

иначе будет память течь.

А вообще макеты - это самое то место для навешивания слушателей.

Это рекомендованный разработчиками способ решать подобные задачи.

Впрочем, конечно можно это решить и при помощи делегирования через jQuery,

слушая события на контейнере карты, например, или на документе, или через тот же live.

Но тогда Вы не сможете получить доступ к данным геообъекта.

Удалённый пользователь
28 января 2016, 02:23

мб так

$('#route_here').live('click', function(){
   alert('sdf');
});

а вот так работает, спасибо )