var marqueeInterval=new Array();  
       var marqueeHeight=16;
       var marqueeId=0;
       var marqueeDelay=2000;
         function scrollMarquee() {
                document.getElementById("marqueeBox").scrollTop++;
                 if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){
                clearInterval(marqueeInterval[1]);
                  }
           }   
       function startMarquee(list){
           var str=list[marqueeId].title;
             marqueeId++;
             if(marqueeId>=list.length) marqueeId=0;
             if(document.getElementById("marqueeBox").childNodes.length==1) {
             var nextLine=document.createElement('DIV');
             nextLine.innerHTML=str;
             document.getElementById("marqueeBox").appendChild(nextLine);
             }
              else {
                    document.getElementById("marqueeBox").childNodes[0].innerHTML=str;
                    document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);
                    document.getElementById("marqueeBox").scrollTop=0;
                  }
                  clearInterval(marqueeInterval[1]);
                  marqueeInterval[1]=setInterval("scrollMarquee()",20);
       }
       function initMarquee(list){
           var str=list[0].title;
           document.write('<div id="marqueeBox" style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
           marqueeId++;
           marqueeInterval[0]=setInterval("startMarquee(list)",marqueeDelay);
       }
       function showAlarmOnScrollBar(){
          info.getAlarmList(function(list){
             initMarquee(list);
          });   
       }其中showAlarmOnScrollBar()是这个函数的入口,info.getAlarmList()函数是dwr的一个接口回调,获得一个结果集,然后用initMarquee函数处理,将结果集的数据一条条的以上下翻滚的模式实现。但是,在显示了第一条记录之后,fireBug就会报错:
  
    function onmouseover(event) {
    clearInterval(marqueeInterval[0]);      marqueeInterval is not defined 
 }
我现在没有多少分了,给不了大家多少分,所以只能请大家帮忙看看,谢谢

解决方案 »

  1.   

    marqueeInterval[0]=setInterval("startMarquee(list)",marqueeDelay);
    这样不行吧,改为
    marqueeInterval[0]=setInterval(function(){startMarquee(list)},marqueeDelay);
    试试
      

  2.   

    这个问题已经解决,现在把新做的代码给大家分享一下。但是现在如何设置定时器又成了问题(初学者没办法,就是处处有难题):
      
                var marqueeContent=new Array();
           var marqueeInterval=new Array();  
           var marqueeHeight=16;
           var marqueeId=0;
           var marqueeDelay=2000;
           
          
           
           //滚动
             function scrollMarquee() {
                    document.getElementById("marqueeBox").scrollTop++;
                     if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){
                    clearInterval(marqueeInterval[1]);
                      }
               }   
               //开始移动
           function startMarquee(){
                 var str=marqueeContent[marqueeId].title;
                 marqueeId++;
                 if(marqueeId>=marqueeContent.length) marqueeId=0;
                 if(document.getElementById("marqueeBox").childNodes.length==1) {
                 var nextLine=document.createElement('DIV');
                 nextLine.innerHTML=str;
                 document.getElementById("marqueeBox").appendChild(nextLine);
                 }
                  else {
                        document.getElementById("marqueeBox").childNodes[0].innerHTML=str;
                        document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);
                        document.getElementById("marqueeBox").scrollTop=0;
                      }
                      clearInterval(marqueeInterval[1]);
                      marqueeInterval[1]=setInterval("scrollMarquee()",20);
           }
           //这个函数是入口函数。起初没有第一句话,经常报marqueeContent【0】is not defined,后来才知道dwr是异步的,因此加上这句话让他同步,我不知道
           //这样好不好,请大家指教。
           function initMarquee(){
              //让dwr进行同步调用,而不采用异步,否则数据太快,使得marqueeContent无法获得值
               dwr.engine.setAsync(false);
               marqueeContent= showAlarmOnScrollBar();
               var str=marqueeContent[0].title;
               document.write('<div id="marqueeBox" style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
               marqueeId++;
               marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
               
           }
           //以下这个类是用来通过回调来获得数据的
           function showAlarmOnScrollBar(){
             var marqueeContentl=new Array();
               info.getAlarmList(function(list){//dwr的客户端实现
                for(i=0;i<list.length;i++){
                   marqueeContentl[i]=list[i];           //将得到的值付给全局变量,其实现在不用这样做了,直接用list就行了,但是已经写成了,那就给大家看吧,不改了
                }
              });   
              return marqueeContentl;
           }
      
      
    新的问题是我想让dwr定时更新,于是我在initMarquee中写了代码setTimeout(“initMarquee()”,5000);但是老报错: marqueeInterval is not defined,后来我又新写了一个函数
      
        function callback(){
              if(marqueeInterval!=null){
                 marqueeInterval=new Array();
              }
              initMarquee();
              setTimeout("callback()",5000);
           }结果还是不行,还是这个错误,请大家帮帮忙
      

  3.   

    我再给大家提供一个思路,我刚才把setTimeout的第二个参数改的更成了一点(marqueeDelay+1000)*marqueeContent.length,这个程序能访问两次后台了,因此我估计是循环时间太短了,所以请帮忙看一下,如何设置时间合适,才能不报那个错误