0

だから私はjquery-form-validatorプラグインを使用して送信する前に検証するフォームを持っています! しかし、ここでの問題はsuccess、ステップごとに実行されたときに、書かれたいくつかの行が実行されないことです。ただし、 で実行するconsoleか、 で実行するとdebugger正常に動作します。実に気の毒な振る舞いだ!! これから来る回避策はありますか?

JS

$.validate({
    form:'#contact-form',
    onError: function () {
        toastr.error("Please correct the below errors!", "Error");
        return false;
    },
    onSuccess: function () {
        $("#btnContactUs").button('loading'); //Not getting called
        $('.form-contact form').find('input,textarea').attr('readonly', true).addClass('disabled'); //Not getting called
        var formdata = new FormData($('.form-contact form').get(0));
        $.ajax({
            url: $("#contact-form").attr('action'),
            type: 'POST',
            data: formdata,
            processData: false,
            contentType: false,
            success:function(data)
            {
                if(data.result)
                {
                    toastr.success(data.message, "Success");
                    $('.form-contact form').get(0).reset();//Check this
                }
                else
                {
                    toastr.error(data.message, "Error");
                }
            },
            error:function(data)
            {
                toastr.error(data.message, "Error");
            }
        });
        $("#btnContactUs").button('reset');
        $('.form-contact form').find('input,textarea').attr('readonly', false).removeClass('disabled');
        return false; // Will stop the submission of the form
    }
});

検証が成功すると、ajax を介して Controller メソッドが呼び出されますが、最初の 2 行は実行されません。

更新:ボタンは、読み込み中のテキストを表示する機能を#btnContactUs持つブートストラップ ボタンです。.button

4

2 に答える 2

1

onSuccess() メソッドの return false は、内部の ajax 成功コールバックが実行される前に実行されています。デバッガーを配置すると、ajax 成功コールバック イベントが発生し、コードが正常に実行されます。

以下のように、jquery の機能を使用し$.whenてこれを解決できます。.then

$.when(
            $.ajax({
                url: $("#contact-form").attr('action'),
                type: 'POST',
                data: formdata,
                processData: false,
                contentType: false,
                success:function(data)
                {
                    if(data.result)
                    {
                        toastr.success(data.message, "Success");
                        $('.form-contact form').get(0).reset();//Check this
                    }
                    else
                    {
                        toastr.error(data.message, "Error");
                    }
                },
                error:function(data)
                {
                    toastr.error(data.message, "Error");
                }
            })
        ).then(function(){
            $("#btnContactUs").button('reset');
            $('.form-contact form').find('input,textarea').attr('readonly', false).removeClass('disabled');
        });
于 2015-05-25T13:29:02.590 に答える
1

これは通常、アクセスしようとしているコントロールが使用できない場合、または前のプロセスが完了する前に 1 つのプロセスを開始している場合に発生します。これらの状況に関係なく AJAX を実行するには、実行されていない行の上に次の setTimeout または SetInterval を追加してみてください。

構文: SetTimeout: http://www.w3schools.com/jsref/met_win_settimeout.asp SetInterval: http://www.w3schools.com/jsref/met_win_setinterval.asp

お役に立てれば!!

于 2015-05-25T12:59:30.620 に答える