Клуб API Карт

Как получить содержимое балуна в виде DOM/jQuery-объекта?

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

Хочется в балуне показывать HTML-форму, submit которой будет контролироваться обработчиком.

Сделать балун с формой получилось, а вот научиться ловить её события и вообще как-то получить доступ к её DOM-узлу — нет.

 

new ymaps.Placemark(
    ...
    { balloonContent: "<form>...</form>" }
);


Вот как обратиться к balloonContent так, чтобы сделать из него jQuery-объект и назначить обычные DOM event-обработчики (или хотя бы второе)?

3 комментария

Через макет

var MyBalloonLayout = ymaps.templateLayoutFactory.createClass('{{ properties.balloonContent|raw }}', {

    build: function () {

         MyBalloonLayout.superclass.build.call(this);

         this,_formElement = jQuery('form', this.getParentElement()).on('submit', ...);

    },

    clear: function () {

         this._formElement.off('submit')

         MyBalloonLayout.superclass.clear.call(this);

    }

})

 

myPlacemark = new ymaps.Placemark(_coords_, { balloonContent: '...' }, { balloonContentLayout: MyBalloonLayout });

 

Да и сам html формы конечно лучше положить в шаблон макета, и передавать в properties только данные полей

Большое спасибо за понятный и исчерпывающий ответ!

Я не нашёл ничего лучше, как просто по селектору найти:
```
document.querySelector('ymaps[class$="-balloon__content"]')
```
А может есть нечто вроде `manager.objects.balloon.getContent()`? Чтобы получить не html-строку, а DOM-объект содержимого балуна? Чтобы не городить макет.