0

少し複雑な機能をクリックイベントにバインドしています

$(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");
            })
        })

    }
}

問題は、一連の高速クリックにより、一貫性のないフェードアウト/フェードイン動作が発生することです。現在のフェードインが完了する前に、新しいクリック イベントが処理されると想定しています。

現在のクリックが終了した後に新しいクリックが処理されるようにするコールバックメカニズムを探していると思います。フェードインにコールバックを追加することはできますが、どのようなロジックが役立つのかわかりません...

また、クリックが処理されている限りコンポーネントのバインドを解除する (そして後で再バインドする) ことについても読みましたが、繰り返しになりますが、それをどのロジックの上に置くかはわかりません。

アドバイスをありがとう :)

4

1 に答える 1

1

jQuery.on.offメソッドを利用できます。

$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;
  }
}

jQuery イベント バインディング プロセスをより直接的に扱う.on/アプローチをお勧めします。.off

于 2012-04-09T07:35:23.110 に答える