0

申し分なく、フォーム検証関数があります。関数は、フィールドが有効でない場合に false を返すフォーム検証関数を実行します。

問題は、フィールドが有効かどうかを ajax を使用してチェックする関数に到達するときです。

何らかの理由で、ajax が返されるのを「待機」せず、自動的に false を返すようです。

これを回避する方法はありますか?

コードは次のとおりです。

function form_validation(){

    if (!NewValidationForm('pcode', 'Please fill in all the fields'))
        return false;
    if (!NewValidationForm('fname', 'Please fill in all the fields'))
        return false;

    if(!validate_coupon()){
        alert("bad!!");
        return false;
    }

    return true;
}

function validate_coupon(){
    var url = $j("#site_url").val() + 'ajax_functions.php';
    var coupon = $j("#pcode").val();
    var result_status = false; // seem its jumps from here to:

    $j.ajax({
    type: "POST",
    url: url,
    data: { ajax: 'ajax', coupon: coupon}
    }).success(function(insertID){
        var obj = $j.parseJSON(insertID);
        if(obj.status == 1){
            result_status = true;
        }
    });
    // straight over here
    if(result_status == true){
        return true;
    }
}
4

1 に答える 1

0

通常、この状況では、次のようなことを行います$(document).ready()

$('form').submit(function (evt) {
    if (!$(this).attr('data-submitted')) {
        evt.preventDefault();
        $(this).attr('data-submitted', 'true');
        // call your form validation code here that fires the ajax request
        return false;
    }
    return true;
});

次に、$.ajaxコールバックで、検証が完了したら、 を呼び出します$('form').submit()。これにより、フォームの属性が、検証リクエストの状態を示すフラグとして効果的に使用されます。ユーザーが最初にフォームを送信すると、フラグが設定され、検証プロセスが開始されます。検証が完了すると、フォームの送信イベントがトリガーされ、フラグが設定されているため、今回は通常どおりフォームが送信されます。

このアプローチがうまくいく場合は、おそらく少し洗練されたものを追加することをお勧めします。たとえば、呼び出す前に送信ボタンを無効にし$.ajax、検証が失敗した場合は再度有効にすることができます。data-submittedまた、ユーザーがフォームを 2 回送信する可能性があり、その場合はおそらく別の検証を実行する必要があるため、検証が失敗した場合は、おそらくフォームから属性を削除する必要があります。

于 2012-12-08T02:28:51.170 に答える