"过多的递归"由jQuery提交

时间:2014-11-06 10:19:32

标签: javascript jquery ajax recursion onsubmit

这是我的自定义提交功能,带有验证。单击“提交”后,它显示“太多递归”。

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

3 个答案:

答案 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 falsee.preventDefault()e.stopPropagation()完全相同。

即。这是正确的:

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

虽然你可以用这个来测试非零长度:

if (fieldError.length) {
    return false;
}

答案 2 :(得分:1)

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

更改您的陈述:

else {
    return true;
}