2011-10-17 5 views
0

jQueryの特定の名前空間に含まれていないイベントをバインド解除する方法はありますか? inmには、開発者が名前空間を指定していない場合、イベントが属するデフォルトの名前空間がありますか?名前空間のないイベントのみをバインド解除する方法はありますか?

例:

$('#id').bind('click.myEvents', handler); //a click with a specific namespace: myEvents 
$('#id').bind('click',handler2); //a click without a specific namespace 

私は最初のものに影響を与えることなく、第2のクリックイベントを対象とすることができるだろうか?

答えて

1

あなたが行く:

// unbinds non-namespaced event handlers 
function unbind(elem, type) { 
    $.each($(elem).data('events')[ type ], function() { 
     if (this.namespace === '') { 
      $(elem).unbind(type, this.handler); 
     } 
    }); 
} 

、その後:

elemあなたのDOM要素( var elem = $('#id')[0];)への参照である
unbind(elem, 'click'); 

ライブデモ:http://jsfiddle.net/simevidas/2p25N/1/

+0

awesome !!作品! –

0

Thisは、別のセレクタの一部ではない要素を選択する方法を示します。私はあなたがin a namespaceではないすべてのものを選択できると思う。 私はそれを試したことはありません、幸運。ここで

0

ない私の知るしかし、あなたはあなた自身の一般的な名前空間にすべてのそれらの他の一般的なイベントを添付することが可能となります。関連するハンドラは、互いの参照を上書きしません。

これはあまりにも多くのアプリを実装する手間があり、ネームスペースに要素をあまりにも多くバインドしてから再バインドすることを心配している場合は、JQの「デリゲート」メソッドとイベントデリゲートを参照してください。よく知らない。

イベントは親要素にバブルアップします。イベントの委任では、この動作を使用して、1つのハンドラを親のチョークポイントに配置し、イベントオブジェクトをチェックして、イベントがトリガされた元の要素を確認してから、その動作を実行します。 1つの要素にバインド/再バインドするのは、オーバーヘッドの大部分ではありません。

関連する問題