2012-02-01 13 views
0

私は同じクラス「クリック可能」との複数の要素を持っているのアンバインド、倍数のインスタンスは、私はすべてのこれらのクラスを結合していjQuery.bindクラスは個別に「クリック可能」です。あなたはこの要素内にもう一度クリックすると、それが再びクリック機能をトリガしないようには、クラス

$(this.id).unbind('click'); 

: は、このバインド機能の中、私は現在、クリックされた要素をアンバインドします。 そして、要素内のものを実行した後(これらの要素には現在のテキストを置き換えるテキストを置き換え、それを外にクリックするとhtmlが変更されます)再度クリックを再バインドしたい私は、明確化のためにいくつかのフィドル

... this.idのクリックをバインド解除するように見えるcant't: http://jsfiddle.net/TrySpace/QZMP6/7/

答えて

4

おそらくあなたの選択が間違っているので(とき本当にあなたのセレクタが$("my_id")のようなものに変換あろうからほしい$("#my_id"))。この場合、次のようにすることができます:

$(this).unbind('click'); 

これは、最終的に要素のDOMを再度照会するよりも優れています。

サイドノートbindおよびunbindはjQuery 1.7では非推奨です。これを書くための更新方法は、onoffである:

$(".clickable").on("click", function() { 
    /* ... */ 
    $(this).off("click"); 
}); 

編集(以下のコメントあたり):

あなたにも通知されることから、親イベントハンドラを防止したい場合は、結合することができイベントの伝播を防ぐ新しいハンドラ:

$(this).off("click").on("click", function (e) { 
    e.stopPropagation(); 
}); 
+1

@Gasman idを使いたければ '$( '#' + this.id)'のように '#'を先頭に含めなければなりません。もちろん、 '$(this) 'を実行できるときにこれを行う理由はありませんが、セレクタが間違っている特定の場所を指摘しました。 –

+0

@BenLee:ありがとうございました - あなたのコメントを含めるように私の答えを更新しました –

+1

@Andrew:文書は 'bind/unbind'を正式に非推奨としていませんが、' on/off'を* "*。 –

1

あなたはjQueryのセレクタベースのイベント委譲を検討したい、とだけ'clickable' Cを削除することができますクリックされたとき小娘...

$('body').on('click', '.clickable', function() { 
    $(this).html('clicked') 
      .removeClass('clickable'); 
}); 

それとも前のjQuery 1.7で、しかし、両方の場合で1.4かそこら...

$('body').delegate('.clickable', 'click', function() { 
    $(this).html('clicked') 
      .removeClass('clickable'); 
}); 

を投稿し、私は'body'にデリゲートハンドラを置き、それすべての.clickable要素を含む限り、よりローカルな要素に配置する方がよいでしょう。