2011-12-08 10 views
0

フィールドがフォーカスされたりぼやけたりすると、jQuery Ajaxリクエストが発生します。すでにリクエストがあった場合は、Ajaxリクエストを起動したくありません。ここに私が持っているものは次のとおりです。jQueryで特定のバインドされたアクションを一時的に無効にする

+0

私は別の変更ができ、質問と再利用のための機能キューを作成しました。それはhttp://jsfiddle.net/6tvTD/2/ – JesseBuesking

答えて

1

unbind

function handler() { 
    $('#domain').unbind('change focus blur', handler); 

    $.getJSON(theURL, '', function(data) { 
     // ... 

     $('#domain').bind('change focus blur', handler); 
    }); 
} 

$('#domain').bind('change focus blur', handler); 
+0

です。別のbind()コールでhandler()をラップする必要がありますか? – BZink

+0

@BZink:Um ...いいえ。 – Ryan

0

変数をバインド関数の有効範囲外に設定し、要求が進行中かどうかを追跡するために使用します。 jsonが返された後にのみ再度有効にしてください。あなたのコメントがある場所で再度有効にすると、要求はまだ進行中ですが、実行はgetJson呼び出しを超えて継続します。

var blocking = false; 
    $('#domain').bind('change focus blur',function(){ 
     if(!blocking) 
     { 
      blocking = true; 
      $.getJSON(theURL,'',function(data){ 
       blocking = false; 
      }); 

      // Re-enable the "bind" here - no, not here. you should re-enable on the callback from the ajax call. 
     } 
    }); 
0
$('#domain').bind('change focus blur',function(){ 

    //check if blocked   
    if ($(this).data("blocked")) return; 

    // Disable the "bind" here 
    $(this).data("blocked", 1); 

    $.getJSON(theURL,'',function(data){ 

    }); 
    // Re-enable the "bind" here 
    $(this).data("blocked", 0); 
}); 
関連する問題