2012-04-09 5 views
0

私はクリックイベントjqueryの - 幸せクリッカー - バウンドイベントにコールバックを探してい

$(someSelector)).bind('click', someFunction(a,b,c)); 

function somefunction(a,b,c) { 
    return function() { 
     // some logic 
     $(anotherSelector).each(function() { 
      // fade out with call back... 
      $(this).fadeOut("fast", function() { 
       // TODO: add callback here??? 
       $(contentSelector).fadeIn("fast"); 
      }) 
     }) 

    } 
} 

にいくつかの少し複雑な機能を結合しています問題は、一貫性のないフェードアウト/フェードインの動作で高速なクリックの一連の結果ということです。現在のfadeInが完了する前に、新しいクリックイベントが処理されていると仮定しています。

私は、現在のクリックが完了した後に新しいクリックが処理されることを確実にするコールバックメカニズムを探しています。私はfadeInにコールバックを追加することができますが、私のロジックが私を助けてくれるかどうかわかりません...

クリックが処理されている間、しかし、もう一度 - 私はそれをどのような論理の上に置くのかはわかりません。アドバイスを

感謝:)

+1

正しく理解していれば、.stop()関数はあなたの役に立つかもしれません:http://api.jquery.com/stop/ –

+0

Thxしかし、stop()は進行中のアニメーションを単にキャンセルします - それは私がここで探しているものではない –

答えて

1

あなたはjQueryの.on.off方法利用することができる:私はcached the jQuery elementを持って

$someElement = $(someSelector) 
$someElement.on('click', someFunction(a, b, c)); 

function someFunction(a, b, c) { 
    // detach the event handler 
    $someElement.off('click', someFunction); 

    /* useful stuff here */ 

    // reattach the event handler 
    $someElement.on('click', someFunction(a, b, c)); 
} 

を。

また、あなたはそれがコールバック内の値ですチェックや設定、コールバックのスコープの変数外を作成することができます。それはjQueryのイベントとより直接的に扱うよう

$(someSelector)).bind('click', someFunction(a,b,c)); 

var isWaiting = false; 
function somefunction(a,b,c) { 
    if (!isWaiting) { 
    isWaiting = true; 

    /* useful stuff here */ 

    isWaiting = false; 
    } 
} 

を私は.on/.offアプローチをお勧めします結合プロセス。

関連する問題