JavaScript错误:预期的对象

时间:2013-09-25 14:38:38

标签: javascript html

我有一个HTML页面,其中包含一个从右到左滚动文本的div;以下JavaScript位于文档的HEAD标记之间。

function scroll(oid, iid) {
            this.oCont = document.getElementById(oid);
            this.ele = document.getElementById(iid);
            this.width = this.ele.clientWidth;
            this.n = this.oCont.clientWidth;
            this.move = function() {
                this.ele.style.left=this.n + "px"
                this.n--
                if(this.n<(-this.width)){this.n=this.oCont.clientWidth}
            }
        }
        var vScroll
        function setup() {
            vScroll = new scroll("oScroll", "scroll");
            setInterval("vScroll.move()", 20);
            }           
        onload = function(){
            setup()
        }

        $("scroll").hover(function() {
            $("scroll").stop(true, false)
        }, function(){
            scroll();
        });
        scroll();

滚动文字很好用;但我希望滚动停止鼠标悬停。虽然当鼠标光标经过div时文本确实停止滚动,但我得到一个javascript错误“Object expected”。 我是javascript的新手,不知道我哪里出错了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的问题出在setInterval上。你传给它一个字符串!这使得它使用eval!这意味着代码在全局范围内运行,因此vScroll不存在。

相反,将函数传递给setInterval

setInterval(function(){
    vScroll.move();
}, 20);

使用&#34; context&#34;调用传递给setInterval的函数。 (this值)设置为null,因此您无法将vScroll.move直接传递给setTimeout。但是,你可以。做:

setInterval(vScroll.move.bind(vScroll), 20);

但这并不适用于所有浏览器。

P.S。将字符串传递给setInterval是不好的做法,您应该始终传递函数。