1

私のフォーム 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が関数を再度呼び出すため、それが起こっていることに気づきました。準備ができたときに実際にフォームを送信するにはどうすればよいですか? これにアプローチする適切な方法は何ですか?

4

2 に答える 2

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
     });

多分よくなる。

詳しくはこちらのページをご覧ください。良い例があります。

于 2013-03-23T17:28:27.817 に答える
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。検証されていない場合はデータを処理しないようにコーディングする必要があります。それ以外の場合、データはすでに検証および処理されており、ページをリロードするだけです。

于 2013-03-23T17:51:49.550 に答える