HTML コンテンツを Web ページに動的にロードするために使用jQuery.load
する場合、ハンドラーを「再バインド」する最良の方法は何ですか?
通常、ハンドラーは でバインドしますjQuery.ready
が、明らかに新しくロードされたコンテンツでは機能しません。これは、ロードされたコンテンツの外側と内側の両方で使用されるハンドラー用であるため、load
成功関数でそれらをバインドするだけではあまり良くありません。
HTML コンテンツを Web ページに動的にロードするために使用jQuery.load
する場合、ハンドラーを「再バインド」する最良の方法は何ですか?
通常、ハンドラーは でバインドしますjQuery.ready
が、明らかに新しくロードされたコンテンツでは機能しません。これは、ロードされたコンテンツの外側と内側の両方で使用されるハンドラー用であるため、load
成功関数でそれらをバインドするだけではあまり良くありません。
これらのハンドラーをサブスクライブする.on
ときは、まだ存在しない DOM 要素でもサブスクライブできる関数を使用できます。それらが追加されると、サブスクリプションが実行されます。この.on
関数は jQuery 1.7 で導入されました。古いバージョンを使用している場合は、.delegate
関数を使用して、jQuery 1.4.2 で導入されたのと同じ効果を得ることができます。さらに古いバージョンを使用している場合は、この.live
方法を使用できます。
以下は、いくつかの要素 (既存または将来追加されるまだ存在しないもの) のクリック イベントをサブスクライブする方法の例です。
$('#someParentElement').on('click', '#someElement', function() {
});
新しいコンテンツのイベントを静的な親要素に委任する必要があります。次に例を示します。
$("#myDiv").load(myUrl);
$("#myDiv").on('click', '#myElement', function() {
// do stuff when #myElement (which was part of the HTML
// returned in the load() call) is clicked.
})
これは、jQuery 1.7 以降を使用していることを前提としています。そうでない場合は、次を使用しますdelegate()
。
$("#myDiv").delegate('#myElement', 'click', function() {
// do stuff when #myElement (which was part of the HTML
// returned in the load() call) is clicked.
})