滚动ul
. 我正在使用 jQuery 版本 1.10.2。当我ul
从 ajax 页面加载时,我无法使用$('ulId').on('scroll', function() {});
或其他实时方法。请帮我找到解决方案。
$(document).on( 'scroll', '#ulId', function(){
console.log('Event Fired');
});
您可能忘记#
在 id 之前给 id 选择器,您需要在ie#
之前给id
ulId
$(document).on( 'scroll', '#idOfDivThatContainsULandScroll', function(){
console.log('Event Fired');
});
编辑
上述方法不起作用,因为滚动事件不会在用于事件委托的 DOM 中冒泡,请参阅这个问题为什么不委托滚动工作。
但是使用现代浏览器 > IE 8,您可以通过另一种方式进行操作。您可以使用带有 javascriptdocument.addEventListener
的事件捕获来代替使用 jquery 进行委派,第三个参数为true
; 看看在这个教程中冒泡和捕获是如何工作的。
document.addEventListener('scroll', function (event) {
if (event.target.id === 'idOfUl') { // or any other filtering condition
console.log('scrolling', event.target);
}
}, true /*Capture event*/);
如果您不需要事件委托,那么您可以将滚动事件直接绑定到 ul 而不是通过document
.
$("#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?
我知道这是很老的事情,但我解决了这样的问题:我的父元素和子元素是可滚动的。
if ($('#parent > *').length == 0 ){
var wait = setInterval(function() {
if($('#parent > *').length != 0 ) {
$('#parent .child').bind('scroll',function() {
//do staff
});
clearInterval(wait);
},1000);
}
我遇到的问题是我不知道孩子何时加载到 DOM,但我每秒都在检查它。
注意:如果它很快发生但不是在文档加载后立即发生,这很有用,否则它将无缘无故地使用客户端的计算能力。
您可以在ajax加载之前将#ulId放在文档中(使用css显示:无;),还是将其包装在包含div中(使用css显示:无;),然后在ajax页面加载期间加载内部html,这样滚动事件将链接到在 ajax 之前已经存在的 div 吗?
然后你可以使用:
$('#ulId').on('scroll',function(){ console.log('Event Fired'); })
显然用可滚动 div 的实际 id 替换 ulId 。
然后设置 css display: block; 加载时在#ulId(或包含div)上?
我刚刚解决了可滚动元素在页面加载后不会立即出现的问题:
$(document).ready(function () {
var checkIt = setInterval(function (){
if($('body').find('.scrollable-wrapper').length > 0){
clearInterval(checkIt);
jQuery('.scrollable-wrapper').on('scroll', function () {
console.log(1)
});
}
},100)
});
发现元素存在后,间隔停止,触发事件监听。