【发布时间】:2017-01-22 11:25:13
【问题描述】:
我正在尝试在 jQuery 中应用简单的表单验证。如果表单字段为空,请添加类error。如果任何字段为空,请不要提交。我有以下内容:
$('#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();
}
});
});
但是,当代码到达提交表单的行时,我看到了 JavaScript 错误:
未捕获的 RangeError:超出最大调用堆栈大小
【问题讨论】:
-
我怀疑这是因为您在每个字段上都创建了一个承诺。无论如何,承诺的目的是什么?我在代码中没有看到异步操作。
-
承诺会告诉我
.each()何时完成。 -
@Justin:不,
.each()是一个同步函数。当您到达下一行代码时,它就完成了。您不需要也不应该为此使用承诺。 (下面的答案中有更多详细信息。)
标签: javascript jquery promise