-1

初めて、データが一致せず、ajax がリクエストを返し、フォームにエラー メッセージを送信した後、フォーム/入力に変更がない場合に ajax 呼び出しを停止するにはどうすればよいでしょうか?

$("input[name=signup]").click(function(event) {

if ($(this).attr('type') == "submit" && $(this).attr('name') == "signup") {

        formValidate = function() {
            $.ajax({
                url:   "/ajax/req-signup.aspx",
                type: "post",
                dataType: "json",
                data: { ... },
                success: function(response) { ... }
            });
        }
        formValidate();
    }
event.preventDefault();
});
4

2 に答える 2

1

グローバル変数を追加します

var allowAjax = true;

検証が失敗した場合はfalseに設定します。

allowAjax = false;

フォーム内の何かを変更するときにtrueに設定する

$("input").change(function () {
    allowAjax = true;
});

ajax呼び出しを行うときにそのステータスを確認します。

if ($(this).attr('type') == "submit" 
   && $(this).attr('name') == "signup" 
   && allowAjax ) { ... }

または、検証が失敗したときに送信ボタンを無効にし、変更時に有効にすることもできます。

$(":submit").attr('disabled', 'disabled');

プラグインを使用してもかまわない場合は、jQueryディセーブルウィジェットを確認してください。使いやすい場合があります。

于 2013-01-23T17:34:03.180 に答える
1

何かが変更されたときにのみクリック イベントをバインドし、クリック イベントが発生したときにバインドを解除できます (したがって、グローバルに使用可能な変数の必要性がなくなります)。

/* whenever an input changes on your form, bind click event */
$("SELECT INPUTS HERE").change(function (){
    /* unbind first to ensure the click event won't be registered/triggered multiple times */
    $("input[name=signup]").unbind("click").click(doSignup);
});

function doSignup(e){
    if ($(this).attr("type") == "submit" && $(this).attr("name") == "signup"){
        /* a successful click has happened - unbind click */
        $("input[name=signup]").unbind("click");

        /* do ajax call */
        $.ajax({
            url:   "/ajax/req-signup.aspx",
            type: "post",
            dataType: "json",
            data: { ... },
            success: function(response) { ... }
        });
    };

    e.preventDefault();
};

UX の観点から、いくつかの方法でこれを強化できます。

  1. また、クリックのバインドを解除するたびにボタンを「無効」にするか、ボタンが現在クリック可能な状態にないことをユーザーに示します。
  2. クリックでバインドを解除する代わりに、条件付きでバインドを解除することを検討してください。同様に、成功時にバインドを解除しますが、エラー時にバインドを解除しないで、再試行できるようにします。また、入力の検証を行っている場合は、ユーザーの入力が有効でないときにバインドを解除することがあります。など。

それが役立つことを願っています!

于 2013-01-23T18:19:46.930 に答える