我有一个表单我正在执行一些自定义验证。这是一段JavaScript处理该最终检查表单提交之前的程序:JQuery RangeError在表单提交
$('.enquiry-form-container form').submit(function (e) {
e.preventDefault();
var invalid = false;
var isblank = false;
//Loop through each input and check if valid or empty
$('.validate').each(function() {
if ($(this).hasClass('invalid')) {
isInValid($(this));
invalid = true;
} else {
//Any fields are blank
if ($(this).val() === "") {
$(this).addClass('blank');
isblank = true;
} else {
$(this).addClass('valid');
isValid($(this));
$(this).removeClass('blank empty');
}
}
});
if (!invalid & !isblank){ //SEND
$(this).find(":submit").prop("disabled", true); //Prevent submit to prevent duplicate submissions
$(this).submit();
} else { //DONT SEND
}
});
每一次我填写表格,并试图提交我在控制台中出现以下错误:
Uncaught RangeError: Maximum call stack size exceeded(…)
据我所知,这可能会出于多种原因,通常是无限循环。任何人都可以看到我在上面的代码错了吗? .submit()
函数是否再次调用submit()
方法...如果是的话如何解决这个问题并发送表单验证?
只是为了清楚起见,这里是我的isInValid()
和isValid()
函数..它们用于添加或删除适当的类,以便根据输入对输入进行不同的样式设置。
//VALID INPUT
function isValid(input) {
input.addClass('valid');
input.removeClass('invalid empty blank');
input.parent().parent().next('.hint').css('visibility', 'hidden');
}
//INVALID INPUT
function isInValid(input) {
input.addClass('invalid');
input.removeClass('valid empty blank');
input.parent().parent().next('.hint').css('visibility', 'visible');
}
或者,它表明,无限递归,特别是你正在调用submit内提交。 –
@HakamFostok好了,所以我想我应该控制发送一个'boolean'的形式,并返回true或false取决于? – Javacadabra
我认为它是'$(this).submit()'。也许所有的输入都不是空白或无效的,因此它陷入了无限递归中。 – philantrovert