2012-01-03 4 views
1
私はjQueryの1.7から新しい on()/ off()方法を使用して、私は次の文を参照 off()ドキュメント読んでいる

:jQuery.proxyによってプロキシjQuery.off()とjQuery.proxy()

ハンドラ()または同様のメカニズムはすべて同じ一意のID(プロキシ関数)を持つため、プロキシされたハンドラを.offに渡すと、意図したよりも多くのハンドラが削除される可能性があります。そのような状況では、名前空間を使用してイベントハンドラをアタッチしたり削除したりする方がよいでしょう。私が直面してる場合です

function show(){ 
    this.$element.on('click', '.close', $.proxy(this.hide, this)); 
} 
function hide(){ 
    this.$element.off('click', '.close', $.proxy(this.hide, this)); 
} 

を私が正しく理解していれば、$ .proxyに対するすべての呼び出しは()と同じUIDを持っているので、私は必要以上のハンドラをdeattachことがあります...
これが正しい場合、私はネームスペースを使用してハンドラをどのようにアタッチできるか分かりません(分かりません)。

+3

* '私含み笑い作る' * "...すべて同じ一意のIDを持っています"。 –

+0

私はそれを得ることはできません。 –

+0

それらがすべて同じIDを持つ場合、IDは一意ではありません。 –

答えて

6

イベントの名前空間は、関連イベントのグループに束ねるために不可欠な方法があります - たとえば、あなたはすなわち、プラグインを作成するときに名前空間を使用したい場合があります。

$(document).bind('show.myplugin', function() {...}); 
$(document).bind('hide.myplugin', function() {...}); 

ので、後に、多分破壊/解体にあなたは

$(document).unbind('.myplugin'); 

定義したすべてのバインドが削除されます(個別に削除されなくなります)。

これにより、ネームスペース外の$.proxy()コールバック関数によって定義された他のバインドのイベントを削除することなく、特定のネームスペースのイベントを削除できます。 jQueryので

+0

だから、彼らはイベントの名前空間を参照しています、そうです...私は彼らがハンドラの名前空間について話していましたが...ああ! –

+0

'on()/ off()'はjQuery 2.2.1の 'bind()/ unbind()'と同じ働きをします –

1

名前空間のイベントは次のように達成することができます。

$(el).bind('click.namespace', function(e) { ... }); 

See jquery documentation

関連する問題