https://jsfiddle.net/thepirat000/w26shjrm/243/#save
by thepirat000
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://api-maps.yandex.ru/2.1/?lang=ru-RU"></script>
<div>Find Address</div>
<input type="text" id="suggest" name="suggest-name" style="width: 600px" value=""/>
<input type="button" id="validate" value="validate" style="display:none;"/>
<p id="result">
</p>
<div id="parts">
<div>Country: <input id="country" type="text" readonly /></div>
<div>Province: <input id="province" type="text" /></div>
<div>Area: <input id="area" type="text" /></div>
<div>Locality: <input id="locality" type="text" /></div>
<div>Street: <input id="street" type="text" /></div>
<div>House: <input id="house" type="text" /></div>
<div>Postal Code: <input id="postal" type="text" /></div>
<input type="button" id="validateInputs" value="validate inputs"/>
</div>
JavaScript
ymaps.ready(initYandex);
function initYandex() {
//https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/SuggestView.html
var suggestView = new ymaps.SuggestView('suggest', {
offset: [10, 10]
});
suggestView.events.add('select', function (r) {
validateSuggest(r);
});
$('#validateInputs').bind('click', function (e) {
validateInputs();
});
}
async function validateSuggest(result) {
console.log("Res");
console.log(result.get('item').value);
await validate($("#suggest").val());
}
async function validateInputs() {
let request = [$("#country").val(), $("#province").val(), $("#area").val(),
$("#locality").val(), $("#street").val(), $("#house").val(),
$("#postal").val()].filter(x => x).join(', ');
await validate(request);
}
async function validate(request) {
$("#parts input[type=text]").val("");
$("#result").text("");
if (!request) {
return;
}
$("#result").text("Validating...");
//console.log(request);
let response = await ymaps.geocode(request, {
results: 1
});
var item = response.geoObjects.get(0);
if (!item) {
return;
}
let metadata = item.properties.get('metaDataProperty.GeocoderMetaData');
console.log(JSON.stringify(metadata));
let kind = metadata.kind;
let error = "";
let ok = false;
switch (metadata.precision) {
case 'exact':
ok = true;
break;
case 'number':
case 'near':
case 'range':
case 'street':
error = 'Incomplete. Specify house number';
break;
case 'other':
default:
error = 'Incomplete. (' + kind + ')';
}
$("#result").text(ok ? 'OK!' : error).css('color', ok ? 'green' : 'red');
let address = item.properties.get('metaDataProperty.GeocoderMetaData.Address');
let postalCode = address.postal_code;
console.log(JSON.stringify(address.Components));
let components = address.Components.reduce((a,x) => ({...a, [x.kind]: x.name}), {});
$("#country").val(components.country);
...