Placemark с button yandex

492
31 января 2018, 13:24

Подскажите пожалуйста как сделать такое:
Открываешь Placemark в нем кнопка выбрать, после ее нажатия на странице нужно перезаписать значение поля.

...
balloonContentFooter: '<button type="button" class="selectSalon" data-name="Название блауна" data-coord="59.324х23.323423">Выбрать</button>'
...

Слушать нажатие через jQuery явно не получится:

$('.selectSalon').on('click', function(){
    console.log('enter');
    console.log(this.data('name'));
});

Да и стили кнопке не поставишь.

Как быть?

Answer 1

Попробуйте так:

ymaps.ready(init);
function init () {
    var map = new ymaps.Map('map', {
            center: [55.650625, 37.62708],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        counter = 0,
        // Создание макета содержимого балуна.
        // Макет создается с помощью фабрики макетов с помощью текстового шаблона.
        BalloonContentLayout = ymaps.templateLayoutFactory.createClass(
            '<div style="margin: 10px;">' +
                '<b>{{properties.name}}</b><br />' +
                '<i id="count"></i> ' +
                '<button id="counter-button"> +1 </button>' +
            '</div>', {
            // Переопределяем функцию build, чтобы при создании макета начинать
            // слушать событие click на кнопке-счетчике.
            build: function () {
                // Сначала вызываем метод build родительского класса.
                BalloonContentLayout.superclass.build.call(this);
                // А затем выполняем дополнительные действия.
                $('#counter-button').bind('click', this.onCounterClick);
                $('#count').html(counter);
            },
            // Аналогично переопределяем функцию clear, чтобы снять
            // прослушивание клика при удалении макета с карты.
            clear: function () {
                // Выполняем действия в обратном порядке - сначала снимаем слушателя,
                // а потом вызываем метод clear родительского класса.
                $('#counter-button').unbind('click', this.onCounterClick);
                BalloonContentLayout.superclass.clear.call(this);
            },
            onCounterClick: function () {
                $('#count').html(++counter);
                if (counter == 5) {
                    alert('Вы славно потрудились.');
                    counter = 0;
                    $('#count').html(counter);
                }
            }
        });
    var placemark = new ymaps.Placemark([55.650625, 37.62708], {
            name: 'Считаем'
        }, {
            balloonContentLayout: BalloonContentLayout,
            // Запретим замену обычного балуна на балун-панель.
            // Если не указывать эту опцию, на картах маленького размера откроется балун-панель.
            balloonPanelMaxMapArea: 0
        });
    map.geoObjects.add(placemark);
}
READ ALSO
jquery как из кода элемента сделать jquery формат

jquery как из кода элемента сделать jquery формат

Получаю все элементы класса

237
Определить ключ в ссылке

Определить ключ в ссылке

Задача такая: есть форма поиска (поиск обычный, без ajax), и после перезагрузки страницы необходимо пользователя отправить к нужному блоку (скролл...

241
Как передать значение value из input1 в value input2

Как передать значение value из input1 в value input2

Есть несколько инпутов с предустановленными значениями(берутся из БД):

265
PHPMailer: Как в тело письма встроить Youtube видео?

PHPMailer: Как в тело письма встроить Youtube видео?

Нужно, чтобы человек открыл письмо и в нём посмотрел Youtube видеоHTML-код для встраивания видео от Youtube в теле письма не работает

268