Клуб API Карт

Как обойти дефолтный выбор в результатах YMaps.SearchControl?

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

Здравствуйте. Столкнулись со следующей проблемой.

 

Имеется карта с отображёнными на ней элементами и элементом YMaps.SearchControl для поиска.

 

Необходимый сценарий - в строке поиска вводится адрес. Нажимается кнопка "Найти". После этого отображается список с результатами. После того, как пользователь выбирает пункт из списка, то есть по событию

YMaps.Events.observe(searchControl, searchControl.Events.Select...

Получаются координаты этого результата поиска через geoResult.getGeoPoint() и происходит редирект на страницу с этими координатами.

 

Проблема в том, что после нажатия кнопки "Найти" получаются результаты, открывается список - и самый первый элемент в списке уже выбран, соответственно срабатывает событие Events.Select и происходит редирект. Возможности выбрать из списка, таким образом, нет. 

 

Есть ли способ как-то отследить получение результатов и среагировать только на следующий Events.Select?

Пробовали отследить через isExpanded(), но к сожалению, после нажатия "Найти" загружаются результаты, раскрывается список, а isExpanded() возвращает 1 при любом выборе из списка. Возвращается true только если свернуть и развернуть кликом список (после collapse() и expand() по-прежнему isExpanded() возвращает 1).

 

Можно ли как-то предотвратить срабатывание Events.Select после нажатия кнопки "Найти"?

 

 

 

 

 

 

 

 

5 комментариев
Sergey Konstantinov
28 января 2016, 06:05

А почему бы просто не пропускать первый Select? Кажется, это самое простое из возможных решений :)

а как потом реагировать на то что он пропишет ещё другой поиск и снова исключить первый селект как?

так же исключить его

используйте переменную-флаг

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

 

var searchControl = new ymaps.control.SearchControl({ provider: 'yandex#map', noPlacemark: true });

        searchControl.setSubmit = false;

        searchControl.events.add("resultselect", function (result)

        {

            if(searchControl.setSubmit) 

            {

                searchControl.setSubmit = false;

                return true;

            }

            /// .....всякое разное

        });

        searchControl.events.add("submit", function (result){

            searchControl.setSubmit = true;

        });

        this.map.controls.add(searchControl, { right: '0px', top: '2px' });

 

да вродебы нет

там же честно выбирается первый результат (центрируется на него)