DOM にまだ存在しないノードにイベントをバインドしようとしている可能性があります。これを解決する最善の方法は、Ajax リクエストの前に存在するリスナーにバインドすることです。これは、フェッチされるコンテンツの先祖 (誤って "親" と呼ばれることもあり、先祖の 1 つのレベルにすぎません) です。たとえば、ページ自体に次のマークアップがあるとします。
<div id="ajaxContainer">
<!-- content will be periodically replaced with Ajax -->
</div>
「ajaxContainer」は、取得しようとしているものの祖先です。次に、適切なメソッドを使用してリスナーをバインドする必要があります。昔は使用できlive()
ましたが、推奨されておらず、とにかく効率的ではありませんでした。delegate()
次に、効率の問題を解決するための推奨事項がありました。これon()
は、 とほぼ同じパフォーマンスですdelegate()
が、構文が異なります。
つまり、.on()
jQuery 1.7+ を使用している場合に使用します。
Ajax 関数が、「星」として分類される一連の div 内にある、星系のマウスオーバーを含むページの一部を取得するとします。構文は次のようになります。
$(document).ready(function() {
$('#ajaxContainer').on('mouseenter', '.stars', function() {
$this = $(this); // cache this specific instance of a stars div as a jQuery object
// do stuff with $this
});
});
これは、「'mouse enter stars divs'」に一致するイベントを ajaxContainer 内でリッスンし始め、それが発生したときに何かを実行することを示しています。