jQuery iframe滚动事件(IE)

时间:2009-05-30 22:31:59

标签: javascript jquery internet-explorer iframe

无法在Internet Explorer 7中收听滚动事件。

我试过了:

$("#myIframe").scroll(function() { alert('hi'); })

为FF工作:

$($("#myIframe").contents().get(0)).scroll(function() { alert('hi'); })

让按键工作:

$($("#myIframe").contents().get(0)).keydown(function() { alert('hi'); })

4 个答案:

答案 0 :(得分:12)

尽管我喜欢jQuery。我不能让这个工作。但是,我在普通的旧javascript中试过这个,它在IE,FF,Safari和Chrome中运行得很好。

<script type="text/javascript">
    window.onload = function() {
      var frm = document.getElementById("myIframe").contentWindow;
      frm.onscroll = function(){
        alert("EUREKA");
      }
    }
</script>

编辑:在使用window.load()时,以下适用于FF,Safari和Chrome。使用document.ready时它只适用于FF。无论出于何种原因,在任何一种情况下它都无法在IE8中运行。

$(window).load(function(){
    $($('#myIframe').contents()).scroll(function(){
       alert('frame scrolled in jquery');
    }); 
}); 

答案 1 :(得分:3)

我知道这是一个旧线程,但有些人会发现它很有用。

$(document).scroll()可以替换为$(window).scroll(),到目前为止它对我有用。

答案 2 :(得分:1)

试试这个:

在遍历嵌套浏览上下文的dom之前必须发生两件事。

您需要知道iframe存在,并处理文档就绪事件。

您需要确保iframe已加载。

即:

    $(document).ready(function(){

        // #page is the id of the iframe
        $('#page').load(function(){
            // $(this)[0].contentWindow is the window of your nested browsing context/ iframe
            $($(this)[0].contentWindow).scroll(function(){
                console.log($(this).scrollTop());
            });
        });
     });

有一点需要注意的是,这绝对不适用于Firefox中的浏览器。

答案 3 :(得分:0)

把它放在父母身上:

var childScrollHandler = function () {
   alert('Scrolling going on');
}

然后将其放在iframe内容上:

$(document).bind('scroll', function(ev){
    parent.childScrollHandler(ev);
});

$(document)替换为您想要收听的任何元素。