Клуб API Карт

Делегирование событий ListBoxItem

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

Доброго времени суток, есть список ListBox в нем динамически изменяемые ListBoxItem, задача назначить событие клика на все ListBoxItem, одиночное навешивание каждому по числовому индексу отпадает. Странно что в апи нет такой возможности, а есть лишь только событие на ListBox целиком и на одиночный item. Конечно подходит такой вариант, который ранее был озвучен:

 

filcon = new ymaps.control.ListBox(....);

filcon.events.add('click', function(e){
        var target = e.get('target');
        if(filcon != target) {
             alert(target.data.get('cat'));
         }

});

 

Как бы все нормально, НО, при клике по ListBoxItem происходит двойное срабатывание, вопрос, почему? и как это побороть?

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

Надо слушать "select"

у ListBox нет события select, он есть ListBoxItem, но без числового индекса и метода get() я немогу назначить им событие или я заблуждаюсь? или вы о другом?

У него нет, но делегирование событий то никто не отменял

А клик работает 2 раза потому, что первый раз вы кликаете по самому выпадающему списку (открываете его)

да именно, но как это сделать? все что пробовал, неработает

 

Что именно не работает?

покажите как вы пробовали

filcon.events.add('select')

а где обработчик события? что вы ожидаете получить таким вызовом?

:-) собственно, в том то и дело, что в итоге ничего неработает

хорошо, тогда как получить ссылку на стек item? чтобы я делигировал на них

https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/IEventManager-docpage/#add

 

callback*

Тип: Function

 

Функция-обработчик события. В качестве параметра в функцию передается объект, описывающий событие. Может быть либо произвольным объектом, либо реализовывать интерфейс IEvent.

а можете пример? спасибо)

одно лечится, другое калечится))) долго думал почему у меня неработает, оказалось с опцией selectOnClick:false работать отказываается, как победить в этой ситуации? мне галочки справа ненужны

если не нужен селект используйте клик с проверкой, как в изначальном варианте

согласен, но как фильтровать второй клик? при вышеуказаной проверкой, второе событие тоже генериуется

Может есть вариант как повещать события только на массив item-ов? в обход ListBox, или опустить событие клика ниже по стеку? велосипед все равно существует)

вся эта проверка работает только при открытии списка http://jsfiddle.net/txnr50yr/3/

Что именно сейчас не так работает?

http://jsfiddle.net/txnr50yr/4/

 

Я вижу только один вывод в консоль при выборе элемента списка

 

Вы видно меня не так поняли, откройте мои пример http://jsfiddle.net/txnr50yr/3/ на алертах наглядно показывает, что при выборе элемента из выпадающего списка, событие обрабатывается два раза, алерт об этом и сигнализирует, а это не правильно, вот что хотел сказать.

Я вижу один алерт в Chrome и Safari

странное поведение в мозиле http://jsfiddle.net/txnr50yr/6/ в сафари и хроме действительно все ок, главное это алерт бажит, в консоль выводит все нормально

 

алертами еще наши дедушки отлаживались на заре интернета

)))))))) согласен, но мне проще написать алерт чем включать консоль, писать вывод в консоль, в основном пишу на php, привычка, НО факт есть факт, баг есть