$('#p1.ul').on('click', 'li' ,function(){
//Do your stuff
});
簡単に言うと、バインドしてクリックイベントをオンにします#p1.ul
(はい、そうではありませんli
)が、li
バブリングする前にイベントを受信したかどうかを確認してからul
、ハンドラーを実行します。
ここでの4つのオペランド/パラメータ、特に#1と#3をよく理解していただきたいと思います。
バインドしているオブジェクト$('#p1.ul')
。
jQueryはすぐにこの式を評価し、結果のすべての要素に関数をバインドします。したがって、このステートメントの実行時にDOMで使用可能だった要素にのみバインドします。
バインドしたいイベントclick
イベントのソースのセレクターイベントは、バインドするとき'li'
に直接トリガーする必要はありません。ul
イベントを受信するのはその子孫のいずれでもかまいません。このイベントは、すべての祖先をカバーするか、伝播が停止するまで上向きにバブルします。すべての要素は、親にバブリングする前にイベントハンドラーを実行する場合と実行しない場合があります。これで、イベントがバインドされた要素にバブルすると、イベントハンドラーを実行する前に、イベントがバブルされた子孫のチェックが行われ、セレクターと一致します。その後、イベントハンドラーが実行され、バブルされます。 (停止しない限り)、そうでなければ単に泡立ちます。'ul'
'li'
イベントハンドラメソッド
それで?実行時に生成される要素へのバインドを処理するときは、#1と#3を正しく選択する必要があります。#1は、イベントを期待している生涯にわたって存続し、イベントを処理するすべての要素の祖先であるような要素である必要があります。また、ツリー内で可能な限り低くする必要があります(より高い要素を選択すると、パフォーマンスが低下します。順序が高く、子孫の数が多く、より多くのイベントがバブルされ、#3の不一致のために破棄されることになります。もちろん、そうでない他の要素でトリガーされる可能性もli
あります。を対象としています)。あなたの場合、#p1.ul
ページが存在し、すべてが存在するまで、は破棄されませんli
その子孫になるため、#1の候補になります。実行時にも生成される場合ul
は、要素ツリーの上位にある要素を選択する必要がある場合がありますbody
。これは最後の手段として選択できます。#3は、実際にイベントを処理する要素のセレクターになります。この選択は一般的に明白ですが、#3ではなく#1に簡単に適用できます。
のクリックイベントに直接バインドするli
と、既存の要素にのみバインドli
され、このバインディングステートメントの実行後に生成された要素にはバインドされません。
$.onの詳細と動的要素へのバインドの例