JQuery - 倾听"滚动"动态添加/附加元素中的事件

时间:2015-07-13 16:47:30

标签: javascript jquery html css

我想在动态添加的元素中检测到JQuery的滚动。鉴于.on()方法检测到click等事件,scroll事件似乎无法被识别。

示例: https://jsfiddle.net/cwv9h0ur/

HTML:

<input type="button" id="add" value="add Divs"/>
<div id="container"></div>
Click: <div id="out"></div><br>
Scroll: <div id="out2"></div>

使用Javascript:

$("#add").on("click",function(){
    var div = document.createElement("div");
    div.className="childDiv";
    div.innerHTML=" TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST  TEST ";
    $('#container').append(div);
})

$("#container").on("click",".childDiv",function (){
    $("#out").html("click detected");
    setTimeout(function(){$("#out").html("")},300)
});

$("#container").on("scroll",".childDiv",function (){
    $("#out2").html("scroll detected");
    setTimeout(function(){$("#out2").html("")},300)
});

CSS:

.container, .childDiv {
    display:inline-block;
    margin: 10px;
    background: lightgray;
    height: 100px;
    width: 80px;   
    overflow:auto;
}

1 个答案:

答案 0 :(得分:2)

滚动事件不会冒泡,因此您无法委派它。但是,您可以在支持它的所有浏览器上捕获事件:

document.getElementById('container').addEventListener(
    'scroll',
    function(event){
        var $elm = $(event.target);
        if( $elm.hasClass('childDiv')){ // or any other filtering condition
           $("#out2").html("scroll detected");setTimeout(function(){$("#out2").html("")},300);
        }
    },
    true // Capture event
);

-jsFiddle-