При изменении скриптом инпута, к которому привязан SuggestView, появляется выпадающая панель с подсказками. Как этого избежать, или как закрыть ее после появления?
Сам мучаюсь, и похоже что ответ "никак". Из доступных методов - только destroy(). Из доступных событий - вообще ноль. Программное изменение текста инпута вызывает практически принудительное всплытие suggest'a, кторому плевать на то, что событие onchange/onfocus/onclick не происходило. Попутно спрошу у отзывчивого саппорта - как избежать появления suggest, если он полностью совпадает с содержимым поля ввода, он ведь бесполезен в этом случае, а при клике все равно всплывает?
> как избежать появления suggest, если он полностью совпадает с содержимым поля ввода, он ведь бесполезен в этом случае, а при клике все равно всплывает?
Предложения по улучшению документации всегда принимаются и рассматриваются. Лично я (не разработчик АПИ) не испытываю с ней проблем – обычная документация не хуже и не лучше чем все другие документации.
Спасибо большое, но это фактически равносильно тому, чтобы делать ему destroy(). Ведь после установки suggestView.state.set('open', false) , suggestView перестает работать. Если я делаю: ===============================
suggestView.state.set({ open: false, panelClosed: true, items: [] }); document.getElementById('suggest').value = 'санкт-петербург'; suggestView.state.set('open', true); =============================== чтобы разрешить дальнейшую работу пользователя, то в момент установки опции в true, подсказка снова всплывает.
Круто! От себя добавлю пример, когда нужно чтобы искал только по Волгоградской области, + если в результате есть улица с номером дома, номер дома попадал в отдельное текстовое поле, а в обычном оставалась улица без дома:
<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU&onload=onLoad"></script> <script> function onLoad (ymaps) { var suggestView = new ymaps.SuggestView('suggest', { boundedBy: [[48.215401, 43.823443], [49.032926, 45.196734]], provider: { suggest: (function(request, options) { request = "Россия, Волгоградская область, " + request; return (suggestView.state.get('open') ? ymaps.suggest(request) : ymaps.vow.resolve([])) .then(function (res) { suggestView.events.fire('requestsuccess', { target: suggestView, }); return res; }) })} }); suggestView.state.set('open', true); suggestView.events.add('select', function (e) { var value = e.get('item').value; var streets = [ 'Россия, Волгоградская область, ', 'Россия, Волгоград, ' ]; for(var i = 0; i < streets.length; i++) { value = value.replace(streets[i], ''); } var house = value.substring(value.indexOf(", ") + 2); var firstLetter = parseInt(house[0]); suggestView.state.set({open: false}); if(!_.isNaN(firstLetter) && _.isNumber(firstLetter)) { $('[data-js-basket-form-house]').val(house); $('[data-js-basket-form-street]').val(value.replace(', ' + house, '')); } else { $('[data-js-basket-form-street]').val(value); } suggestView.events.once('requestsuccess', function () { suggestView.state.set('open', true); }); }); } </script>
Нормальное (и ожидаемое) закрытие списка по клику на пункте до сих пор не работает. Причём, когда вышеописанное вставляешь в песочницу яндекса, всё закрывается нормально. А у себя - нет.