2012-04-03 20 views
0

私はアニメーションメニューを作成しているので、前後にタブをスライド/展開して見ています。私はクリックされたタブにアタッチしているアニメーションイベントをバインド解除する以外はすべて動作します。ほとんどの場合、タブをクリックすると、リスナーがアニメーションの終わりに接続され、次のタブをクリックすると、以前にクリックされたタブにリスナーをバインド解除します。しかし、何らかの理由で.off関数を起動することはできません。以下は私のコードです.offアニメーション終了イベントをアンバインド

var $featuredTab = this.$('.featured'), 
    $tabContainer = $(e.target).parent(), 
    $menu = this.$el, 
    index = $tabContainer.index(), 
    count = $tabContainer.parent().children().length; 

    if($featuredTab.length > 0) { 
     $menu.off('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', $featuredTab, function() { 
      console.log('off'); 
      //do stuff 
     }); 
    } 

    $tabContainer.addClass('featured'); 


    $menu.on('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', $tabContainer, function(e) { 
      console.log(e.originalEvent); 
      //do stuff 
    }); 

オフイベントはなぜ発生していないのですか?

+0

「this」とは何ですか? –

+0

jQueryイベントのバインド解除についてです。 – Francisc

答えて

0

セレクタとして2番目のパラメータを扱っていると仮定すると、onが正しく使用されていません。 2番目のパラメータは、オブジェクトを渡すセレクタ(文字列)です。第2(セレクタ)および第3(データ)パラメータはオプションです。

ここを見てみましょう - http://api.jquery.com/on/

をあなたはこれを試すことができますが。

$menu.off('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd'); 
+0

ボール - そうです。 "セレクタ:セレクタ文字列" – user834418

+0

@ShankarSangoliセレクタはオプションです。データオブジェクトを渡すと、トリガされたイベントハンドラの 'event.data'で利用可能になります。 – scurker

+0

コード内のデータとしてどこにも使用されていません。 – ShankarSangoli

0

off()は、イベントをトリガしませんので。

off()メソッドは、.on()で接続されたイベントハンドラを削除します。

以前メニューに添付されたすべてのイベントバインド解除したいように見えます:あなただけのイベントを削除したい場合は、ドキュメントからthis exampleを参照してください

// this removes ALL events 
$menu.off('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd'); 

を。

関連する問題