我有一個表單我正在執行一些自定義驗證。這是一段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