"太多递归"由jQuery提交

"Too much recursion" on submit by jQuery

本文关键字:quot 提交 jQuery 太多 递归      更新时间:2023-09-26

这是我的带有验证的自定义提交函数。在我点击提交后,它显示"太多递归"。

$('#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方法正在无限调用。我怎样才能解决这个问题。

问题是,如果表单有效,则对其调用.submit(),CCD_1会再次调用回调,.submit()会再次调用,等等,然后得到一个无限递归循环。

只需删除

else {
    $("form#searchform" ).submit();
    return true;
}

总之,它应该可以工作(回调不会返回任何内容,浏览器将继续默认的表单提交行为)。

无需在else语句中提交表单:

更改您的声明:

else {
    return true;
}

您需要在submit中停止重新提交:

更改此项:

else {
    $("form#searchform").submit();
    return true;
}

至:

else {
    return true;
}

或者只需将其全部删除,因为默认情况下(如果您没有返回任何内容)也是继续提交。

验证失败时,您已经正确地返回false,因此不需要使用e.preventDefault()。4与CCD_ 5和CCD_。

即这是正确的:

if (fieldError.length != 0) {
    return false;
}

尽管你可以用这个测试非零长度:

if (fieldError.length) {
    return false;
}