使用onSubmit时提交表单

时间:2013-03-23 17:25:09

标签: javascript jquery

我的表单onSubmit正在调用:

onsubmit="validate(this); return false;"

validate()如下:

function validate(obj) {
    $.ajax({
        url : "ajax/validate_check.php",
        type : "POST",
        data : $("#" + obj.id).serialize(),
        success : function(data) {
            $('#' + obj.id + ' :input.form_errors').removeClass('form_errors')
            data = $.parseJSON(data);
            if(data['error_count'] >= 1) {
                $.each(data, function(i, item) {
                    $('#' + i).addClass('form_errors');
                });
            } else {
                $('#' + obj.id).submit();
            }
        }
    });
}

当我有0个错误时,它试图提交表单,但我得到了一个无限循环。我意识到它正在发生,因为我的onSubmit再次调用该函数。我准备好后如何实际提交表格?解决这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您的验证函数应该返回true或false,具体取决于错误。

  onsubmit = "return validate(this)"

  function validate(obj){
     ...
     if(data['error_count'] >= 1) {
            $.each(data, function(i, item) {
                $('#' + i).addClass('form_errors');
            });
            return false; //stop submitting
        } else {
            return true;//continue submitting
        }
  }

虽然,因为你使用的是jquery:

     $("#formid").submit(function(){
           //your validation code
     });

可能会更好。

查看this page了解详情。有一个很好的例子。

答案 1 :(得分:0)

您已提交表单以进行验证。

} else {上,您无法再次提交,正如您所注意到的那样。您应该调用函数将其提交到whatever_process_the_validated_data.php

虽然我建议使用相同的.php来验证和处理数据 - 每个类都有一个类或函数。这样你就可以:

$('.forms_that_need_validation').submit(function() {
$.ajax({
    url : "ajax/data_validation_and_processing.php",
    type : "POST",
    data : $(this).serialize(),
    success : function(data) {
        $(this + ' :input.form_errors').removeClass('form_errors')
        data = $.parseJSON(data);
        if(data['error_count'] >= 1) {
            $.each(data, function(i, item) {
                $('#' + i).addClass('form_errors');
            });
        } else {
            location.reload();
        }
    }
});
return false;
});

如果数据无法验证,则会发生错误 - 您应该编写.php代码,以便在未经过验证时不处理数据。否则,数据已经过验证和处理,然后只是重新加载页面。