Shitcode to code
Сделал форму валидации на обычном JS. Из-за малого опыта у меня тут куча if, не могу передать координаты Яндекс.Карт в другую функцию для валидации и ещё неизвестно что. С координатами я "костыльнул" сохранив их в невидимый div :-) свой Api key удалил, поэтому координаты в примере получить не получится, не знаю стоит ли его в открытый доступ давать ключ :-) Код рабочий.
Подскажите как можно код уменьшить или как валидацию по кнопке сделать без моего костыля с div'ом :-)
let errorName = document.querySelector(".name-error");
let errorNumber = document.querySelector(".number-error");
let errorEmail = document.querySelector(".email-error");
let errorMap = document.querySelector(".map-error");
let completed = document.querySelector(".mailForm__completed");
function viodChecker() {
let name = document.querySelector(".mailForm__name").value;
let number = document.querySelector(".mailForm__number").value;
let Email = document.querySelector(".mailForm__email").value;
let Coords = document.querySelector(".coords");
if (name === "") {
errorName.style.display = "block";
}
if (name !== "") {
errorName.style.display = "none";
}
if (number === "") {
errorNumber.style.display = "block";
}
if (number !== "") {
errorNumber.style.display = "none";
}
if (Email.indexOf("@") === -1) {
errorEmail.style.display = "block";
}
if (Email.indexOf("@") !== -1) {
errorEmail.style.display = "none";
}
if (Email.indexOf("@") !== -1) {
errorEmail.style.display = "none";
}
if (Coords.textContent === "") {
errorMap.style.display = "block";
}
if (Coords.textContent !== "") {
errorMap.style.display = "none";
}
if (name !== "" && number !== "" && Email.indexOf("@") !== -1 && Coords.textContent !== "") {
completed.style.display = "block";
}
}
//КОД ИЗ ДОКУМЕНТАЦИИ ЯНДЕКС КАРТ НЕМНОГО ПОПРАВИЛ (91 строка) ДЛЯ ВЫВОДА КООРДИНАТ, А НЕ АДРЕСА https://yandex.ru/dev/maps/jsbox/2.1/event_reverse_geocode/
ymaps.ready(init);
function init() {
var myPlacemark,
myMap = new ymaps.Map('map', {
center: [55.555, 37.6],
zoom: 4,
controls: ['geolocationControl', 'searchControl']
});
// Слушаем клик на карте.
myMap.events.add('click', function (e) {
var coords = e.get('coords');
// Если метка уже создана – просто передвигаем ее.
if (myPlacemark) {
myPlacemark.geometry.setCoordinates(coords);
}
// Если нет – создаем.
else {
myPlacemark = createPlacemark(coords);
myMap.geoObjects.add(myPlacemark);
// Слушаем событие окончания перетаскивания на метке.
myPlacemark.events.add('dragend', function () {
getAddress(myPlacemark.geometry.getCoordinates());
});
}
getAddress(coords);
});
// Создание метки.
function createPlacemark(coords) {
return new ymaps.Placemark(coords, {
iconCaption: 'поиск...'
}, {
preset: 'islands#violetDotIconWithCaption',
draggable: true
});
}
// Определяем адрес по координатам (обратное геокодирование).
function getAddress(coords) {
myPlacemark.properties.set('iconCaption', 'поиск...');
ymaps.geocode(coords).then(function (res) {
var firstGeoObject = res.geoObjects.get(0);
myPlacemark.properties
.set({
// Формируем строку с данными об объекте.
iconCaption: [
// Видоизменил строку для вывода координат, а не адреса!
firstGeoObject.geometry.getCoordinates(),
].filter(Boolean).join(', '),
// В качестве контента балуна задаем строку с адресом объекта.
balloonContent: firstGeoObject
});
document.querySelector(".coords").textContent = firstGeoObject.geometry.getCoordinates();
});
}
}
body, .mailForm {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
input, textarea {
font-size: 14px;
margin: 10px 0 0 0;
width: 350px;
resize: none;
}
.mailForm__map {
margin-top: 10px;
}
button {
margin: 10px 0 0 0;
font-size: 14px;
cursor: pointer;
}
.mailForm__comment {
display: inline-block;
height: 200px;
}
.mailForm__error, .mailForm__completed, .coords {
display: none;
color: red;
font-size: 16px;
font-weight: bold;
margin-top: 10px;
}
.mailForm__completed {
color: green;
font-size: 20px;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="style.css" rel="stylesheet">
<title>Mail Form</title>
<script src="https://api-maps.yandex.ru/2.1/?apikey=5200498b-0123-4796-1-bee4ea5473212&lang=ru_RU" type="text/javascript">
</script>
</head>
<body>
<div class="mailForm">
<input class="mailForm__name" placeholder="Имя" type="text" value="">
<input class="mailForm__number" placeholder="Телефон" type="tel" value="">
<input class="mailForm__email" placeholder="Email" type="email" value="">
<div id="map" class="mailForm__map" style="width: 100%; height: 200px">
</div>
<textarea class="mailForm__comment" maxlength="500" placeholder="Комментарий" type="text" value=""></textarea>
<button onclick="viodChecker()">Отправить</button>
<div class="mailForm__error name-error">Введите имя</div>
<div class="mailForm__error number-error">Введите телефон</div>
<div class="mailForm__error email-error">Неверный формат эл. почты</div>
<div class="mailForm__error map-error">Адрес не указан</div>
<div class="mailForm__completed">Форма отправлена!</div>
<div class="coords"></div>
</div>
<script src="script.js"></script>
</body>
</html>