Клуб API Карт

Подскажите, как навесить обработчик на ссылку в балуне

egor.korotchenko
13 января 2011, 18:27

Если есть схожие посты, просьба дать ссылку (я не нашел)

Суть:

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

 Я добавляю балун с меткой. В балун вставляю ссылку, событие по клику на которой намереваюсь обработать:

var placemark = new YMaps.Placemark(new YMaps.GeoPoint(obj.x, obj.y), {hideIcon: false, style: 'default#houseIcon'});
placemark.name = '';
placemark.description = '';
var balContent = '';
balContent += '<p><b>'+'Some my content'+'</b></p><br />';

balContent += '<p><a href="#" name="obj_lnk" id="'+obj.id+'" >Детальная информация</a></p>';

placemark.setBalloonContent(balContent);
map.addOverlay(placemark);

Далее я намереваюсь навесить обработчик с вызовом метода из моего js-модуля на добавленную в балун ссылку. Все попытки тщетны. Пытался через Events.observe и просто найти этот элемент и навесить JQuery.click(), но реакции ноль. Понимаю, что очевидно сама карта отрисовывается вероятно в своем контексте, или может вставляет фрейм содержащий себя, но как тогда действовать, через YMaps.JQuery?. Понимаю также, что очевидно при поиске ссылки в балуне, он очевидно должен быть открыт, но события отлавливающего сей момент в документации также не нашел. Вот что я пытался сделать:

YMaps.jQuery('a#'+obj.id).bind('click',function(){
                        try{alert('1[obj.id]:'+obj.id);}catch(e_id_1){alert('1-exception:'+e_id_1);}
                        try{alert('2[this.id]:'+YMaps.jQuery(this).attr('id'));}catch(e_id_2){alert('2-exception:'+e_id_2);}
                        try{
                            MyJsModule.myMethod(obj.id);
                        }catch(e){
                            alert(e);
                            try{
                                MyJsModule.myMethod(YMaps.jQuery(this).attr('id'));
                            }catch(e2){
                                alert(e2);
                            }
                        }
                    });

Просто навесить click на балун целиком, может както так? Но тогда непонятно как получить у метки привязанный к ней балун.

YMaps.Events.observe(placemark, placemark.Events.Click, function () {
                        alert('1');
                        try{
                            MyJsModule.myMethod(obj.id);
                        }catch(e){
                            alert(e);
                        }
                        alert('2');
                    }, MyJsModule, true);

Как использовать YMaps.Placemark.BalloonOpen - совершенно непонятно. Документация по методу - никакая!

Вобщем документацией по api в целом недоволен. Подскажите, пожалуйста, на примере!

4 комментария
Подписаться на комментарии к посту
Попробуйте, например, так:

YMaps.Events.observe(placemark, placemark.Events.BalloonOpen, function () {
   map.getBalloon().getContentLayout().getRootNodes().find('a#' + placemark.id).bind('click', callback /* нужный обработчик */);
}, placemark);
Спасибо! Здорово, работает:)
Только, чтобы быть предельно точным, в моем случае:

YMaps.Events.observe(placemark, placemark.Events.BalloonOpen, function () {
   map.getBalloon().getContentLayout().getRootNodes().find('a#' + obj.id).bind('click', callback /* нужный обработчик*/);

}, placemark);
Схожие обсуждения есть. Даже есть специальный тег ссылка в балуне.