私は実際のコードを提供するための詳細が必要ですが、あなたはEvent Delegationに見たいと思うかもしれません:
イベントの代表団は、その上で起こったイベントをリッスンする親オブジェクト上の単一のイベントリスナーの使用を意味します子供(または深い子孫)。イベントの委任により、開発者は非常に特定のターゲット上で発生するイベントに反応しながら、イベントリスナーのアプリケーションを疎にすることができます。これは、何百ものイベントリスナーを作成することでパフォーマンスが急速に低下する、イベントリッチなWebプロジェクトで高いパフォーマンスを維持するための重要な戦略であることが証明されています。
迅速な、基本的な例:
<div id="container">
<img src="happy.jpg">
<img src="sad.jpg">
<img src="laugh.jpg">
<img src="boring.jpg">
</div>
しかし、その代わりに4枚の画像を、あなたはあなたがしたい100、または200を持っている:
は、あなたがこのようなイメージを持つDIVを持っていると言いますクリックイベントをイメージにバインドして、ユーザーがクリックしたときにXアクションが実行されるようにします。ほとんどの人々の最初のコードは次のようになります。
$('#container img').click(function() {
performAction(this);
});
これはあなたのページのパフォーマンスを行き詰まらするイベントハンドラのcraploadをバインドしようとしています。イベント委任を使用すると、このような何かを行うことができます。
これが唯一の実際のコンテナに1つのイベントをバインドします、あなたは、イベントのtarget
プロパティを使用して、クリックされたかを把握し、それに応じて委任することができます。これは、しかし、まだ痛みの一種であり、あなたは実際にjQueryのlive
機能を使用して、すべてこれを行うことなく、この大幅な性能向上を得ることができます。このことができます
$('#container img').live('click', function() {
performAction(this);
});
希望を。
これは非常に興味深く、よく知っていますが、私の質問に対する答えは正確ではありません。 私が本当に知りたいのは、15-20のイベントハンドラが実行されていて、5つ以上のハンドラがロードされていて、スライド間で5つ以上のハンドラがアンロードされているという場合です。 – thirsty93
私が言っていることは、同じ5つのハンドラを実行して委任しておくことができ、バインディングとバインドを解除する必要はないということです。 –
@thirsty:あなたがパフォーマンスを探しているなら、これはとても良い答えです。パオロはあなたがハンドラ対15-20を持っていると言っています。 –