最近做了个状态栏滚动函数,如下
function myScroll(count,str)
{
this.str=str;
this.count=count;
var space="";
if(this.count>0&&this.count<this.str.length+1)
{
for(i=this.str.length-Math.abs(this.count);i>0;i--)
{space+=" ";}
window.status=space+this.str.substring(0,this.count);
this.count++;
}
if(this.count<0&&this.count>-(this.str.length+1))
{
window.status=this.str.substring(Math.abs(this.count),this.str.length)
this.count--;
}
if(this.count==-(this.str.length+1)){this.count=1;}
if(this.count==this.str.length+1){this.count=-1;}
setTimeout(this,1000);
};
但结果只执行了一次,这是什么原因呢?
大家帮忙分析一下。。

解决方案 »

  1.   

    你的错误原因就是那个setTimeout(this,1000);应该换成setTimeout("myScroll("+count+",'"+str+"'",1000);
      

  2.   

    this如果没有明确指出则代表指向window
      

  3.   

    this根本没有指定哪个东西你要他怎么执行?
    setTimout里面最好不要用this之类的
    你可以这样写
    setTimeout(function(){myScroll(count,str)},1000)
    也可以这样写
    setTimeout('myScroll('+count+',"'+str+'")',1000)
      

  4.   

    setInterval('myScroll('+count+',"'+str+'")',1000)应该上这句话
      

  5.   

    window.setInterval('myScroll('+count+',"'+str+'")',1000)
      

  6.   


    setTimeout("myScroll("+count+",'"+str+"'",1000);//这样
      

  7.   

    function myScroll(count,str)
    {
    setTimeout("myScroll("+count+",'"+str+"'",1000);
    }
    setTimeout("myScroll("+count+",'"+str+"'",1000);
      

  8.   

    受教了,那为什么要在str中加单引或者双引包围起来呢?这是什么原因?
      

  9.   

    setTimeout("函数名("+参数+")",毫秒数),这里的参数只能是字符串形式的
    或:
    setTimeout(回调函数,时间,参数1,...,参数n)。执行多次用setInterval就好了。他和setTimeout递归区别还是很大的!上面有几楼是错误的,不多说!
      

  10.   

    那这样的话,是不是可以写成setTimeout(myScroll(),1000,count,str)?或者另外的写法,请指正。。
      

  11.   

    LZ你最好先仔细看一下相关setTimeout参数的详细说明
    10楼写法明显是错误的
    setTimeout("myScroll("+count+",'"+str+"'",1000);
    这种写法要把执行的语句用字符串形式连接起来
    count是数值型
    str是字符型所以里面要用"
    这跟 eval('myScroll('+count+',"'+str+'")')其实是一个意思如果要直接写函数而不是字符串形式的执行那么就要这样写
    setTimeout(function(){
      myScroll(count,str); //要调用的函数体
    },时间)