あなたが.on()
の動的なバージョンを使用したい場合は、あなたが必要
$(staticParentSelector).on('click', '.displayBig', fn);
staticParentSelector
があなたのdynamiの親を指すセレクタである必要があります。このフォームを使用しますイベントハンドラをインストールするために上記のjQueryを実行するときに存在し、イベントハンドラのインストール後に破棄されずに再作成されないオブジェクトでなければなりません。 2番目のセレクタ(ダイナミックセレクタと呼ぶ)と一致するオブジェクトは、最初は存在する必要はなく、将来いつでも作成できます。最悪の場合には
、それはこの可能性があります。static親のためのすべての基準document
オブジェクトを満たしているので
$(document).on('click', '.displayBig', fn);
。しかし、あなたのイベントは、あなたの実際の動的オブジェクトに非常に近い静的な親を選んだ場合や、すべての動的イベントに対してdocument
オブジェクトを使用しないと、より良い結果が得られます。
だから、あなたはこのようにHTMLを持っていた場合:次に
<div id="container">
<a href="images/large_4.jpg" class="displayBig" data="gallery0">
<div id="magnify">dsfsfdsfs</div>
</a>
</div>
、あなたはこのよう.on()
の動的なバージョンを使用します。
$("#container").on('click', '.displayBig', fn);
方法を.on()
作品の動的なバージョンがあることです単一のイベントハンドラを静的オブジェクトにバインドします。次に、誰かがあなたの動的オブジェクトをクリックすると、そのオブジェクトにクリックイベントのダイレクトイベントハンドラがないので、クリックが先祖オブジェクトをバブルアップします。イベントハンドラを持つstaticParentオブジェクトにイベントが到達すると、動的イベントハンドラがインストールされていることがわかり、イベントを発生させたオブジェクトをダイナミックセレクタと比較します。一致した場合、イベントハンドラを起動します。一致しない場合、イベントは発生しません。
この問題は、イベントのバブリングが必要なことです。 "selectorが省略されているかnullの場合、イベントハンドラは直接的または直接的に参照されます。ハンドラは、選択された要素にイベントが発生するたびに呼び出されます。 (内部)要素 セレクタが提供される場合、イベントハンドラは委任されたと呼ばれます。バインドされた要素でイベントが直接発生したときにハンドラが呼び出されるのではなく、セレクタに一致する子孫(内部要素)に対してのみハンドラが呼び出されます。 jQueryはイベントをイベントターゲットから要素 " – Tom