0

我正在创建一个动态滚动 div,它在 Jsfiddle 上运行良好,如此处所示 --> http://jsfiddle.net/9zXL5/19/embedded/result/但在浏览器上我得到:

未捕获的类型错误:无法将属性“onscroll”设置为 null

所以然后我添加$(document).ready(function (){到我的代码中并得到了

未捕获的 ReferenceError:未定义 yHandler

我不明白为什么我会收到这些错误,但它在 jsfiddle 上流畅。如果有人能告诉我我不理解或遗漏的内容,我将不胜感激。有问题的代码如下

var movelist = document.getElementById('movelist');
    $(document).ready(function (){
    function  yHandler (){
        var contentHeight = movelist.scrollHeight;
        var yOffset = movelist.clientHeight;
        var y = yOffset + movelist.scrollTop;
        if(y >= contentHeight){
            movelist.innerHTML += '<div class ="newData">hey look at me</div>';
        }
    }
});
movelist.onscroll = yHandler;
4

4 回答 4

1

var movelist = document.getElementById('movelist');

movelist.onscroll = yHandler;

在您的 document.ready 调用中。

或者,摆脱 document.ready 调用(无论如何,您似乎没有任何 jQuery)并将您的代码放在文档末尾的脚本块中,位于结束 body 标记之前。

jsFiddle 示例

于 2012-09-18T19:27:59.273 回答
0

您需要在标签之外定义您的功能 $(document).ready(function (){...});

于 2012-09-18T19:28:09.943 回答
0

它在你的小提琴中工作,因为一切都在同一个范围内。你movelist在你的$(document).ready. 将var movielist = ...和移动movielist.onscroll = yHandler;到您的$(document).ready.

您还可以将您的yHandler功能移到您的$(document).ready.

于 2012-09-18T19:29:32.663 回答
0

您应该将所有代码移动到 onload 处理程序中

$(document).ready(function (){
    var movelist = document.getElementById('movelist');
    function  yHandler (){  
        var contentHeight = movelist.scrollHeight;
        var yOffset = movelist.clientHeight;
        var y = yOffset + movelist.scrollTop;

        if(y >= contentHeight){
            movelist.innerHTML += '<div class ="newData">hey look at me</div>';
        }          
    }
    movelist.onscroll = yhandler
});

现在您yhandler与使用它的地方在同一范围内。在您的示例中,它被定义为内部函数,并且您试图从函数外部访问它。定义内部函数时,它们就像局部变量一样,只能由函数本身访问。

于 2012-09-18T19:30:40.977 回答