15

我在滚动事件时遇到了一些问题。

我正在尝试将事件附加/绑定到特定的 div,并且我正在$('body').on()这样做,因为在排序时会重新加载内容,因此它将失去其绑定。

这不起作用,事件不会被触发:

$('body').on('scroll', 'div.dxgvHSDC + div', function () {
}

另一方面,这有效:

$('body').on('mousewheel DOMMouseScroll', 'div.dxgvHSDC + div', function () {
}

这也是:

$('div.dxgvHSDC + div').on('scroll', function () {
}

有什么问题?

4

2 回答 2

32

您不能将委托添加到scroll事件中。此事件不会冒泡 DOM,因此您不能将其委托给任何元素。您可以在此处找到更多信息:

滚动事件不会冒泡。

尽管该事件不会冒泡,但当用户滚动整个页面时,浏览器会在文档和窗口上触发滚动事件。

您需要在创建滚动元素的事件中创建事件处理程序。

活生生的例子:http: //jsfiddle.net/Um5ZT/1/

$('#link').click(function(){

    //dynamically created element
    $('body').append('<div class="demo"></div>');
        
    //dynamically added event
    $('.demo').on('scroll', function () {
        alert('scrolling');
    });
    
});
于 2013-09-26T14:16:27.617 回答
15

scroll在现代浏览器 (IE>8) 上,您可以将事件捕获到document动态元素的级别。由于 jQuery 没有实现捕获阶段,你必须使用 javascriptaddEventListener()方法:

document.addEventListener(
    'scroll',
    function(event){
        var $elm = $(event.target);
        if( $elm.is('div.dxgvHSDC + div')){ // or any other filtering condition
            // do some stuff
            console.log('scrolling');
        }
    },
    true // Capture event
);
于 2015-05-27T07:16:08.353 回答