Этот вопрос закрыт для ответов, так как повторяет вопрос Как правильно проверить форму?
@dmitriu256

Как сделать валидацию селектора через свой декоративный селект?

Как проверял раньше обычные формы(телефон, имя и тд)
Пример
for(let i = 0; i < calcForm.elements.length; i++) {
 if(calcForm.elements[i].type !== 'button' && calcForm.elements[i].type !== 'submit'){
             calcForm.elements[i].setAttribute('required', 'required');
             calcForm.elements[i].addEventListener('blur', validateForm);
           }
}

 function validateForm(){
        let rule = this.dataset.rule;

        let check;

        switch (rule) {
            case 'name':
                check = /^[А-Яа-яЁёA-Za-z]{3,11}$/.test(this.value);
                break;

            case 'email':
                check = /^[a-zA-Z._-]+\d*@[a-z]+?\.[a-z]{2,3}$/.test(this.value);
                break;

            case 'phone':
                check = validatePhone(this.value);
                break;

            //Необязательное поле, может оставаться пустым
            case 'message':
                check = true;
                break;

            default:
                check = false;
        }

        if (check) {
            this.style.border = '2px solid green';
        } else {
            this.style.border = '2px solid red';
            this.value = '';
        }
    }


Как применить туже модель к валидации такой формы - проблема возникает при выборе в декоративном селекте а не в стандартном, по умолчанию стандартный селект будет скрыт.
5ea71686c599c230624216.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++) {

    if(calcForm.elements[i].type !== 'button' && calcForm.elements[i].type !== 'submit'){
        //Срабатывает на всех инпутах но не на селекте - когда произведен выбор в декоративном
        calcForm.elements[i].addEventListener('blur', function(){
            //Использовал
            console.log(calcForm.elements[i].value);

            if(this.value !== 'none' && this.value.trim()) {
                this.style.border = '2px solid green';
            }else{
                this.style.border = '2px solid red';
            }
            /*
            - где обычный input в консоль выводится его значение

            - если выбор производить в стандартном select - результат выводится успешно

            - если выбор происходит через декоративный селект, то значение в стандартном select меняется но в консоль выводится пустая строка и не срабатывают стили обводки для стандартного селекта
            */
                });
    }

}

Результат вывода blur в консоли браузера
5ea7169fa255a898651070.png
  • Вопрос задан
  • 166 просмотров
Ответы на вопрос 1
Seasle
@Seasle Куратор тега JavaScript
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы