0

フォームのあるページがあります

ユーザーがフォームを送信したら、ボタンを非表示にし、スピナー gif と検証中のメッセージを含む div を表示します

ので、私は持っています:

function submit_application(input){



    $('#create_account_button').hide();
    $('#create_account_validating').show();


    var form = $(input).parents('form:first');
    var form_id = ($(form).attr('id'));
    var valid = validate_form(form_id);

    if(valid){
        $('#'+form_id).submit();
    }


}

私のフォーム送信ボタンには次のものがあります:

onclick="submit_application(this);return false"

validate_form は、各入力をループし、構文などを検証します。

特定のフィールドを検証するためにサーバーへの ajax 呼び出しが行われるため、実行には数秒かかります。

Firefox では問題なく動作しますが、Internet Explorer と chrome ではボタンが消えることはありません。

私はいくつかのトラブルシューティングを行い、関連するdivを非表示にして表示する前に、ブラウザがフォームを検証していることに気付きました..

奇妙な行動、何かアイデアはありますか?

4

3 に答える 3

0

コールバックを使用しますか?

function submit_application(input){    

    $('#create_account_button').hide(0, '', function(){

        $('#create_account_validating').show(0, '', function(){
            var form = $(input).parents('form:first');
            var form_id = ($(form).attr('id'));
            var valid = validate_form(form_id);

            if(valid){
                $('#'+form_id).submit();
            }
        });
    });
}
于 2012-07-02T14:29:36.523 に答える
0

jQuery の送信ハンドラーを使用してみてください: http://api.jquery.com/submit/

$('#myform').submit(function() {
    $('#create_account_button').hide();
    $('#create_account_validating').show();

    var valid = validate_form('myform');
    if(valid)
        $(this).submit();
    else
        return false;
}
于 2012-07-02T14:27:44.793 に答える
0

このように、検証を遅延関数でラップしてみてください...

function submit_application(input){
    $('#create_account_button').hide();
    $('#create_account_validating').show();

    setTimeout(function() {
        var form = $(input).parents('form:first');
        var form_id = ($(form).attr('id'));
        var valid = validate_form(form_id);

        if(valid){
            $('#'+form_id).submit();
        }
    }, 250);
}

あなたのコードがあなたが説明したことをしている理由はわかりませんが、それで問題は解決するはずです。

于 2012-07-02T14:25:20.113 に答える