これを行うとどうなりますか:
$('#elementID').delegate('.findclick a', 'click', function()
{
alert("test");
}
そして最初に:
#elementID
ドキュメントに存在しません
また
#elementID
存在.findclick a
しますが、存在しません。
本当に悪いですか?それともまったく関係ありませんか?
トリガーしない...だから問題ない。
これらの要素を( を使用して)動的に追加する.on()
と、トリガーされて機能します。
例:
$(document).on('click', 'a.delegatedElementThatDoNotExistYet', function() {
alert("Welcome");
});
委任された要素が存在しないため何も起こりませんが、
setTimeout(function() {
$('body').html('<a class="delegatedElementThatDoNotExistYet">Hello!</a>');
},5000);
数秒後 (私の例では 5 秒) にデリゲートされた要素を追加すると、アラートが発生します。
JsFiddleの例
.findclick a
の子供がいる場合、2番目は悪くなる可能性があり#elementID
ます。function(){
alert("test");
}
これらのアンカーをクリックするたびにトリガーされます。
ポイントは、リスナーを親にバインドし、子を処理することです
が存在しない場合#elementID
、何も起こりません。要素が存在しないため、イベント ハンドラーをバインドできません。
存在する場合は、おめでとうございます。これで、イベント デリゲーション#elementID
が設定されました。簡単に言うと、イベント デリゲーションは、まだ存在していないが、ページが読み込まれた後のある時点で存在する要素にイベント ハンドラーを設定する手法です。
2 番目の状況は、まさに がどのように使用されることを意図.delegate()
しているかです。
#elementID
ドキュメントに存在しません
関数が作成され、デリゲート (空) として結果セットに適用されます。そのため、何も起こりません (作成された関数は最終的にガベージ コレクションを取得します)。
#elementID
存在.findclick a
しますが、存在しません。
ここでも関数が作成され、デリゲートとして結果セットに適用されます ( 1 つの要素のみを含む必要があります)。
#elementID
これで、その中の任意の要素がクリックされるたびに、jQuery は登録されたデリゲート (1 つだけである必要があります) を反復処理して、一致するセレクター ( '.findclick a'
) を見つけます。
後で.findclick a
その下に作成#elementID
すると、クリックすると関数の実行が開始されます。