Я пытаюсь применить простую проверку формы в jQuery. Если поле формы пустое, добавьте класс error
. Если какое-либо из полей пуст, не отправляйте их. У меня есть следующие:Максимальный размер стека вызовов превышен с помощью jQuery prom()
$('#contact-form').submit(function(event) {
event.preventDefault();
var formValid = true;
$('input.required, textarea.required, select.required').each(function() {
if($(this).val() === '') {
formValid = false;
$(this).addClass('error');
} else {
$(this).removeClass('error');
}
}).promise().done(function() {
if(formValid) {
$('#contact-form').submit();
}
});
});
Howerver когда код попадает в линию, чтобы отправить форму, я вижу ошибку JavaScript:
Uncaught RangeError: Максимальный размер стека вызовов превысил
Я заподозрить это потому, что вы создаете обещание на каждом из поля. Во всяком случае, в чем цель обетования? Я не вижу асинхронных операций в коде. –
Обещание говорит мне, когда '.each()' закончен. – Justin
@Justin: Нет. '.each()' является * синхронной * функцией. Он заканчивается, когда вы достигаете следующей строки кода. Вам не нужно и не следует использовать это обещание. (Подробнее см. В нижеприведенном ответе.) –