11

したがって、私の質問には2つの制約があります。

  1. クリック イベントで外部関数呼び出しを使用する必要があり、
  2. 通常のクリック イベントをバインドするのではなく、ライブ クリック イベントを使用する必要があります。

したがって、私の問題は、クリックイベントが発生した後にバインドを解除し、クリックイベントコードが完了したら再バインドしようとしていることです。コードが現在処理中のときに重複したクリックを防ぐためにこれを行っています (ボタンを 2 回または 3 回すばやくクリックできるようにするフェードイン/アウト アニメーションがあるため、コードを 2 回または 3 回実行しますが、これは望ましくありません)。 . 私が使用しているコードは以下のとおりです。

$item.live("click", handleClick);

function handleClick(ev) {

    $(this).die("click");

    // perform code here, including things with 'ev'

    $(this).live("click", handleClick);
}

私は頭がおかしいのですか、それとも問題なく動作するはずですか? 今のところ、一度クリックすることはできますが、その後はできません。したがって、明らかに die() は機能していますが、何らかの理由でその関数に再バインドされていません。ライブクリックを再バインドするために handleClick() のコードに到達することを確認しました。

何か案は?どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

8

ドキュメントによると:

ライブ イベントは現在、セレクタに対して使用された場合にのみ機能します。

$(this)セレクターではありません。

于 2009-11-25T19:21:46.107 に答える
6

.live()を使用してバインドされたすべてのクリックハンドラーのバインドを解除するには、.die()メソッドを使用します。

$(".clickme").die("click");
于 2011-07-17T13:03:03.020 に答える
0

このパターンを使用して、クリックされた要素のバインドを解除し、他のすべてを有効にすることができます。

$('a.myselector').live('click', function() {

    // do things

    $(this).unbind('click').live('click', function() {return false;});

    return false; // block the link
});

JQUERY 1.8.2 で動作します

于 2013-06-04T12:52:18.887 に答える