重複の可能性:
ajax呼び出し後のjquery bind関数とトリガー
$('.chatr').mouseover(function() {
$('#'+this.id+" .action").removeClass('dn');
});
ページが読み込まれると関数は機能しますが、ajax を介して新しいコンテンツが読み込まれると、新しい div の関数が機能しません。
重複の可能性:
ajax呼び出し後のjquery bind関数とトリガー
$('.chatr').mouseover(function() {
$('#'+this.id+" .action").removeClass('dn');
});
ページが読み込まれると関数は機能しますが、ajax を介して新しいコンテンツが読み込まれると、新しい div の関数が機能しません。
デリゲートを使用する必要があります。
$(document).on('mouseover', '.chatr', function() {
$(this).find('.action').removeClass('dn');
});
ただし、すべての要素のコンテナがある場合は、.chatr
代わりにそのコンテナの ID を使用しますdocument
。
これは、ページの読み込み時にイベントがフックされるためです。特定の.chatr
要素はロード後に追加されるため、デリゲート イベント ハンドラーと呼ばれるものを使用する必要があります。これを試して:
$(document).on('mouseover', '.chatr', function() {
$('#' + this.id + " .action").removeClass('dn');
});
document
コンテンツが追加されている最も近い静的な親要素に置き換える必要があることに注意してください。
jQuery イベント ハンドラーは、コードの実行時に存在する要素にのみバインドされます。そのコードが実行された後に追加された要素は、セレクターの基準を満たしている場合でも、イベント ハンドラーが自動的にバインドされることはありません。解決策はイベント委任です:
$(document).on('click', '.chatr', function(e) {
$('#'+this.id+" .action").removeClass('dn');
});
.on()
理想的には、最も近い静的な祖先要素 (つまり、常に存在し、イベントをトリガーする要素を常に含むもの) で関数を呼び出す(そしてイベント ハンドラーをバインドする) document
. ただし、HTML を見なければ、どの要素であるべきかを知ることは不可能です。
これは、動的に作成された要素では機能しません。これは、最初のページの読み込み後に新しく追加された要素に対してイベント ハンドラー バインドが削除され\設定されていないためです。
あなたができることは、イベントリスナーを '.chatr' div の親要素に追加し、$(event.target).hasclass('chatr') を介してチェックして、イベントが発生するかどうかを判断することです