serii81
@serii81
Я люблю phр...

Как сделать задержку перед отправки формы на чистом javascript?

У меня есть следующий код
let inputCollection = document.querySelectorAll('input[type="email"], input[type="text"], input[type="number"]');
let myForm = document.querySelector('.myForm');
let result = document.querySelector('.result');

function isEmpty(el){
    return el.value.length === 0;
}

myForm.onsubmit = function(){
    let res = [];
    let resultText = '';

    for (let i = 0; i < inputCollection.length; i++) {
        if (!isEmpty(inputCollection[i])) {
            res.push(inputCollection[i]);
        }else{
            inputCollection[i].classList.remove('succes');
            inputCollection[i].classList.add('error');
            resultText += 'Missing datat for input ' + inputCollection[i].getAttribute('type') + '<br>';
        }
    }

    result.classList.remove('succes');
    result.classList.add('error');
    result.innerHTML = resultText;

    if(res.length === inputCollection.length){
        result.classList.remove('error');
        result.classList.add('succes');
        result.innerHTML = 'Data was sent';

        setTimeout(function(){
            console.log('wait');
        }, 2000);

    }else{
        return false;
    }
};

for (let i = 0; i < inputCollection.length; i++) {
    inputCollection[i].oninput = function(){
        this.classList.remove('error');
        this.classList.add('succes');
    };
}


а вот весь код https://jsfiddle.net/serii/65br0ye8/3/

Хочу вывести небольшое сообщение после успешной отправки формы.
Я вставил таймер setTimeout, чтобы задержать на две секунды отправку формы, но это не сработало.
То есть задержка на jsfiddle есть, но совсем небольшая.
Если перед ним сделать return false, а после - return true, тоже не сработает?
Как решить эту проблему?
  • Вопрос задан
  • 1085 просмотров
Решения вопроса 2
@vaajnur
битриксоид
не правильно понимаешь работу формы, таймаута.
Показать сообщение после успешной отправки формы - это надо делать на аякс. Ставь preventDefault на отправку, делай запрос аякс, проверяй ответ, далее по таймауту выводи сообщение.
Ответ написан
lidacriss
@lidacriss
wtf
думаю, что надо примерно так
https://jsfiddle.net/p8ekqdqh/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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