Задать вопрос
@comrad86

Как через яндекс API вывести в отдельных полях автоподстановку региона и автоподстановку населенного пункта?

Здраствуйте.

Не очень силен в JS, но задачу поставили, вывести на сайте два поля, вместо одного(адрес):
1) Регион
2) Населённый пункт (город, село, деревня, хутор, станица и т.д.).

Данные должны проверятся через яндекс.
Как это было ранее:
<script type="text/javascript">
ymaps.ready(init);
function init(){
	var suggestView=new ymaps.SuggestView('adres');
	suggestView.events.add('select',function(event){
		var selected=event.get('item').value;
		ymaps.geocode(selected,{
			results:1
		}).then(function(res){
			return ymaps.geocode(res.geoObjects.get(0).geometry.getCoordinates(),{
				kind:'district',
				results:10
			}).then(function(res){
				var founded=res['metaData']['geocoder']['found'];
				$('label.suggest .description').html("");
				for(i=0;i<=founded-1;i++){
					var info=res.geoObjects.get(i).properties.getAll();
					console.log(info);
					var name=info['name'];
					if(name.search('район')!=-1){
						name=name.replace(' район','');
						console.log(name);
					}
				}
			});
		});
	});

}
</script>


Тут все прекрасно работало. Адрес подставлялся.

Покопался в интернете, переписал так:
<script type="text/javascript">
    ymaps.ready(function () {
        init('gorod', ['locality', 'village', 'hamlet', 'suburb']);
        init('region', ['region']);
    });

    function init(targetId, kinds) {
        var suggestView = new ymaps.SuggestView(targetId);
        suggestView.events.add('select', function (event) {
            var selected = event.get('item').value;
            ymaps.geocode(selected, {
                results: 1
            }).then(function (res) {
                var geoObject = res.geoObjects.get(0);
                var kind = geoObject.getMetaData().kind;
                if (kinds.includes(kind)) {
                    return ymaps.geocode(geoObject.geometry.getCoordinates(), {
                        kind: 'district',
                        results: 10
                    }).then(function (res) {
                        var founded = res['metaData']['geocoder']['found'];
                        $('label.suggest .description').html("");
                        for (var i = 0; i <= founded - 1; i++) {
                            var info = res.geoObjects.get(i).properties.getAll();
                            console.log(info);
                            var name = info['name'];
                            if (name.search('район') !== -1) {
                                name = name.replace(' район', '');
                                console.log(name);
                            }
                        }
                    });
                }
            });
        });
    }
</script>


Но этот код работает так же как и для старого поля адрес, в обоих полях подстановка работает для полного адреса.
Помогите пожалуйста, сделать разную подстановку.
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы