ul
のスクロール中にスクロールイベントが発生していません。 jQueryバージョン1.10.2を使用しています。 ajaxページからul
を読み込んでいるので、$('ulId').on('scroll', function() {});
やその他のライブメソッドを使用できませんでした。解決策を見つけるのを手伝ってください。
$(document).on( 'scroll', '#ulId', function(){
console.log('Event Fired');
});
IDセレクターのIDの前に#
を指定するのを忘れた可能性があります。id
name__の前に#
を指定する必要があります。つまり、ulId
name__です。
おそらく、ulとscrollsを含むdivでscrollイベントをバインドする必要があります。 ul
name__ではなくdivでイベントをバインドする必要があります
$(document).on( 'scroll', '#idOfDivThatContainsULandScroll', function(){ console.log('Event Fired'); });
編集
スクロールイベントはイベントの委任に使用されるDOMでバブルしないため、上記は機能しません。この質問を参照してください なぜスクロールの作業を委任しないのですか?
しかし、最新のブラウザー> IE 8では、他の方法で実行できます。 jqueryを使用して委任する代わりに、Javaスクリプトdocument.addEventListener
でイベントキャプチャを使用して委任できます。この tuturial でのバブリングとキャプチャの動作を確認してください。
document.addEventListener('scroll', function (event) {
if (event.target.id === 'idOfUl') { // or any other filtering condition
console.log('scrolling', event.target);
}
}, true /*Capture event*/);
イベントの委任が不要な場合は、document
name__を介して委任する代わりに、スクロールイベントをulに直接バインドできます。
$("#idOfUl").on( 'scroll', function(){
console.log('Event Fired');
});
Ajaxを使用してulが読み込まれた後にスクロールイベントをバインドすることで問題が解決しました。私の調査結果では、$(document).on( 'scroll'、 '#id'、function(){...})は機能せず、ajaxロードが機能していることが判明した後、スクロールイベントをバインドします。
$("#ulId").bind('scroll', function() {
console.log('Event worked');
});
Ulを削除または置換した後、イベントのバインドを解除できます。
それが誰かを助けることを願っています。
VueJSを使用して、この質問のすべての方法を試しましたが、どれも機能しませんでした。誰かが同じように苦労している場合:
mounted() {
$(document).ready(function() { //<<====== wont work without this
$(window).scroll(function() {
console.log('logging');
});
});
},
$("body").on("custom-scroll", ".myDiv", function(){
console.log("Scrolled :P");
})
$("#btn").on("click", function(){
$("body").append('<div class="myDiv"><br><br><p>Content1<p><br><br><p>Content2<p><br><br></div>');
listenForScrollEvent($(".myDiv"));
});
function listenForScrollEvent(el){
el.on("scroll", function(){
el.trigger("custom-scroll");
})
}
この投稿を参照してください- スクロールイベントをダイナミックDIVにバインドしますか?
Ajaxの読み込み前にドキュメントに#ulIdを配置(css表示:なし;)するか、それを含むdivにラップ(css表示:なし;)してから、ajaxページの読み込み中に内側のhtmlを読み込むだけで、そうすれば、スクロールイベントはajaxの前にすでに存在するdivにリンクされますか?
次に使用できます:
$('#ulId').on('scroll',function(){ console.log('Event Fired'); })
ulIdをスクロール可能なdivの実際のIDに置き換えます。
次に、css display:blockを設定します。ロード時に#ulId(またはdivを含む)で?
私はこれがかなり古いことを知っていますが、そのような問題を解決しました:親要素と子要素がスクロール可能でした。
if ($('#parent > *').length == 0 ){
var wait = setInterval(function() {
if($('#parent > *').length != 0 ) {
$('#parent .child').bind('scroll',function() {
//do staff
});
clearInterval(wait);
},1000);
}
私が抱えていた問題は、子供がいつDOMにロードされたかわからなかったが、毎秒それをチェックし続けていたことです。
注:これは、ドキュメントの読み込み直後ではなく、すぐに発生する場合に役立ちます。そうでない場合、クライアントの計算能力を理由なく使用します。