2011-12-19 11 views
0

他の多くのサイトにロードされているjavascriptウィジェットを開発しています。javascriptウィジェットからすべてのjqueryライブイベントを削除するには

ウィジェットがロードされているときに、リンクやボタンにjqueryライブイベントをバインドします。例えば :

$('.my-submit').live('click', function() {...}); 
... 
$('.my-link').live('click', function() {...}); 

そこで問題は、私が唯一のウィジェットのリンクやボタンのすべてのライブイベントを削除する方法ですか?

答えて

3

これを行う簡単な方法は、名前空間と結合し、すべての名前空間のイベントを削除することです:

$('.my-submit').live('click.myPlugin', function() {...}); 

あなたはその後、名前空間にdieを呼び出すことができます。いっその

$('.my-submit').die('click.myPlugin'); // only myPlugin events are removed 

はjQueryの1.7で導入されonoff機能を使用することです。

$(document).on('click.myPlugin', '.my-submit', function() {...})) 
      .on('click.myPlugin', '.my-link', function() {...})); 

$(document).off('click.myPlugin'); // remove all myPlugin functions 
0

JQuery.unbind()メソッドを試すことができます。

$.('.my-link').unbind('click'); 

これが役に立ちますようお願いいたします。

0

あなたが.die()を使用したい:

が 要素から.live()を使用して、以前に接続されたすべてのイベントハンドラを削除します。

出典:http://api.jquery.com/die/サイドノートで

、あなたはそれがパフォーマンスが向上すると.live()のよう推奨されていませんので(jQueryののバージョンに応じて、または.on().delegate()から.live()を使用してから移動する必要がありますjQuery 1.7。

$(<selector>).live(<event>, <handler>); 

は同じです:.delegate()を使用してにボーナス

$(document).delegate(<selector>, <event>, <handler>); 

あなたのルート要素を(あなたがdocumentを使用するように強制されていない)を選択できることです。

屋のためのいくつかのドキュメント:

+0

jQuery 1.7以降の場合、Jasperが提案する優先順位の順序を逆にします。後者は前者のエイリアスであるため、 '.delegate()'ではなく '.on()'に直接移動します将来的には廃止される可能性が高くなります。 –

1

jQuery 1.7以降では、.live()メソッドは非推奨となりました。 .on()を使用してイベントハンドラをアタッチします。 jQueryの古いバージョンのユーザーは、.live()よりも.delegate()を優先して使用する必要があります。

参照のjQueryのポイント自身:

jQuery

の使用または代理人から、これは問題ではありません。

関連する問題