这是我的自定义提交功能,带有验证。单击“提交”后,它显示“太多递归”。
$('#searchform').on('submit', function(e){
var validateError = '';
var id = '';
var fieldError = [];
$('#searchform :input:text').each(function(){
id = $(this).attr('id');
validateError = jQuery.fn.validationEngine.loadValidation(document.getElementById(id));
if (validateError) {
fieldError.push(id);
}
});
if (fieldError.length != 0) {
return false;
}
else {
$("form#searchform").submit();
return true;
}
});
});
我的表单花了太多时间提交。在控制台中,我可以看到我的验证Ajax方法无限调用。我怎么能解决这个问题。
答案 0 :(得分:6)
问题是,如果表单有效,请在其上调用.submit()
,再次调用您的回调,再次调用.submit()
等等,您将获得无限递归循环。
只需删除
else {
$("form#searchform" ).submit();
return true;
}
完全它应该工作(你的回调不会返回任何内容,浏览器将继续使用默认的表单提交行为)。
答案 1 :(得分:1)
您需要在提交中停止重新提交:
改变这个:
else {
$("form#searchform").submit();
return true;
}
为:
else {
return true;
}
或完全删除它作为默认值(如果你不返回任何内容)也是继续提交。
验证失败时您已正确返回false,因此无需使用e.preventDefault()
。 return false
与e.preventDefault()
和e.stopPropagation()
完全相同。
即。这是正确的:
if (fieldError.length != 0) {
return false;
}
虽然你可以用这个来测试非零长度:
if (fieldError.length) {
return false;
}
答案 2 :(得分:1)
无需在else语句中提交表单:
更改您的陈述:
else {
return true;
}