@dmitriu256

Как правильно проверить форму?

Как произвести валидацию такой формы
5ea5cc8dd6517586562946.png

Что хочу проверять
1) Что все поля введены - если так то зеленая обводка и отправка
2) Если форма заполненна не полностью - производить ее сброс и перекрасить обводку всех элементов в красный цвет
3) По умолчанию стандартный селект будет скрыт - манипуляция с ним осуществляется через декоративный селект

Как с помощью декоративного селекта прослушать событие blur у Реального селекта?
Или навесить событие blur на декоративный селект?
Как делал раньше
Навешивал обработчик события blur на каждый элемент формы и добавлял условия проверки
5ea5cece12620789017362.png5ea5ced81bfd7438980065.png
Почему не сбрасывается обводка у селектов, при отправке не полной формы, где ошибка?

let calcForm = document.forms.calculationForm;

    //Универсальный переключатель декоративных селектов и связь с реальным ++
    const selectAllElements = document.querySelectorAll('[data-select]');

    selectAllElements.forEach(item => {
       item.addEventListener('click', function(event) {
           //Реальный селект
           const realSelect = this.nextElementSibling;

           if(event.target.hasAttribute('data-select-item')){
           //Клик по пунктам в dropdown
               let itemTitle = event.target.getAttribute('data-select-item');
               this.querySelector('[data-select-title]').textContent = itemTitle;

               this.querySelector('.form-select__dropdown').classList.toggle('hidden');

               realSelect.value = itemTitle;


           }else{
           //Клик по заголовку
               this.querySelector('.form-select__dropdown').classList.toggle('hidden');
           }
       });
    });

    //END Универсальный переключатель декоративных селектов и связь с реальным ++



for(let i = 0; i < calcForm.elements.length; i++) {
    //Срабатывает на всех инпутах но не на селекте - когда произведен выбор в декоративном
    calcForm.elements[i].addEventListener('blur', function(){
       alert('+++');
    });
}


    //Обработка отправки формы
    calcForm.addEventListener('submit', function(event) {
       event.preventDefault();

       for(let i = 0; i < calcForm.elements.length; i++){

           if(calcForm.elements[i].type !== 'button' && calcForm.elements[i].type !== 'submit'){

               //Проверка что все поля заполненны
               if(calcForm.elements[i].value !== 'none' && calcForm.elements[i].value.trim()) {
                   calcForm.elements[i].style.border = '5px solid green';

                   //Тут будет отправка данных на сервер через AJAX

               }else{
                   calcForm.elements[i].style.border = '5px solid red';

                   //Сбрасываем декоративный select
                   selectAllElements.forEach(el => {
                       el.querySelector('[data-select-title]').textContent = el.nextElementSibling.options[0].textContent;
                   });

                   resetForm(calcForm); // или calcFor.reset();

               }

           }
       }
    });


function resetForm(form){
    for(let i = 0; i < form.elements.length; i++) {
        form.elements[i].value = '';
    }
}


Полный код
Код проекта
  • Вопрос задан
  • 337 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы