Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не работает код валидации на JS (https://javascript.ru/forum/events/82854-ne-rabotaet-kod-validacii-na-js.html)

Qsnakes 18.07.2021 21:59

Не работает код валидации на JS
 
Ребят, только новичок в теме разработки, помогите найти ошибку в коде, целый день потратил на это, будут полезны любые советы.

p.s консоль выдает ошибки на: 59, 30, 10 строке кода



"use strict"

document.addEventListener('DOMContentLoaded', function () {
    const form = document.getElementById('form');
    form.addEventListener('submit', formSend);

    async function formSend(e) {
        e.preventDefault();

        const error = formValidate(form);

        if (error === 0) {
            
        } else {
            alert('Заполните обязательные поля');
        }

    }


    function formValidate(form) {
        let error = 0;
        let formReq = document.querySelectorAll('._zxc');

        for (let index = 0; index < formReq.length; index++) {
            const input = formReq[index];
            formRemoveError(input);

            if (input.classList.contains('_email')) {
                if (emailTest(input)) {
                    formAddError(input);
                    error++;
                }
            } else if (input.getAttribute("type") === 'checkbox' && input.checkbox === false) {
                formAddError(input)
                error++;
            } else {
                if (input.value === '') {
                    formAddError(input);
                    error++;
                }
            }
        }
        return error;
    }

    function formAddError(input) {
        input.parentElement.classList.add('_error');
        input.classList.add('_error');
    }

    function formRemoveError(input) {
        input.parentElement.classList.remove('_error');
        input.classList.remove('_error');
    }

    //Функция проверки E-mail
    function emailTest(input) {
        const re = !/^\w+([\.-]?\w+)*@\w+)[\.-]?\w+)*(\.\w{2,8})+$/
        return re.test(input.value);
    }
});

рони 18.07.2021 22:09

Qsnakes,
строка 59 странный RegExp, про остальное можно только гадать без макета.

Qsnakes 18.07.2021 22:13

рони,
Прошу прощения что сразу не предоставил https://jsfiddle.net/5g30tzsf/

рони 18.07.2021 22:22

Qsnakes,
исправьте строку 59 и связанную с ней строку 30 -- других ошибок не вижу.

Qsnakes 18.07.2021 22:25

рони,
Спасибо огромное, займусь этим

рони 18.07.2021 22:28

Qsnakes,
заменить соответствующую функцию, в дальнейшем можно уточнить RegExp, если эта версия не устроит.
//Функция проверки E-mail
    function emailTest(input) {
        const re = /^\w+([\.-]?\w+)*@(\w+[\.-]?\w+)*(\.\w{2,8})+$/
        return !re.test(input.value);
    }

Qsnakes 18.07.2021 22:39

рони,
О господи не знаю как вас отблагодарить, действительно все заработало, а не подскажите где можно прочитать про этот восклицательный знак и как он все починил?

рони 18.07.2021 22:52

Цитата:

Сообщение от Qsnakes
где можно прочитать про этот восклицательный знак

"починил" всё синтаксически правильный RegExp, а куда воткнуть логический оператор не не так важно https://learn.javascript.ru/logical-operators#ne
с таким же успехом восклицательный знак можно перенести в строку 30
if (!emailTest(input))

из return emailTest.

весь вопрос? что должна вернуть функция true или false, это значение можно изменить на любой стадии. объяснил как мог)))

Qsnakes 18.07.2021 23:05

рони,
Спасибо еще раз, за статью отдельное спасибо, очень помогли


Часовой пояс GMT +3, время: 14:08.