【问题标题】:Submitting a form when using an onSubmit [duplicate]使用 onSubmit 时提交表单 [重复]
【发布时间】:2013-03-23 17:25:09
【问题描述】:

我的表单 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 再次调用了该函数。准备好后如何实际提交表格?解决这个问题的正确方法是什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您的验证函数应根据错误返回真或假。

      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 了解更多详情。有一个很好的例子。

    【讨论】:

    • OP 使用 AJAX 来验证表单,所以这没有帮助。
    • 它似乎对我不起作用。知道为什么吗?
    • 在这种情况下,将验证移至按钮单击并在验证成功后提交表单。
    • 我正在考虑这个问题,但我希望用户能够按 Enter 键提交表单。
    • 返回未定义
    【解决方案2】:

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

    如您所见,在} 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 代码,以便在数据未验证时不处理数据。否则,数据已经过验证和处理,然后它只是重新加载页面。

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2013-10-08
      • 2011-12-05
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多