2009-11-25 16 views
11

だから私の質問への2つの制約があります。jQueryの:バインドとバインド解除ライブをクリックしてイベント

  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()のコードに到達していることを確認しました。

アイデア?どんな助けでも大歓迎です。ありがとう。 documentationによると

答えて

8

:現在セレクタに対して使用された場合にのみ動作

ライブイベント。

$(this)はセレクタではありません。 (.live使用してバインドされたことすべてからのクリックハンドラをバインド解除するには

+0

@グレッグ、興味深いです。おそらく関数のライブクリックイベントを 'var $ tempVar = $( '#' + $(this).attr( 'id'))'に代入し、 '$ tempVar.live(" click "、handleClick)'これはうまくいくと思いますか? –

+0

I * think * so ... – Greg

+2

はいそうです – PetersenDidIt

6

)、.dieを使用する()メソッド:

$(".clickme").die("click"); 
0

あなたは、クリックされた要素のバインドを解除し、すべての他の人が住んでできるように、このパターンを使用することができます:jQueryの1.8.2と

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

    // do things 

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

    return false; // block the link 
}); 

作品

関連する問題