2013-07-03 122 views
0

我试图做一个倒计时计时器的基础上一个隐藏的领域,包含秒的完成秒数的表中的每一行。以下是我迄今所做的:JS导致浏览器冻结

function countdownProcedure(){ 
     var interval = 1000; 
     var i = 0; 
     var seconds; 
     $(".rfqTbl tr").each(function(){ 
       if(i > 0){ 
         seconds = $(this).find("#sqbTimestamp").text(); 
         var days = Math.floor(seconds/(60*60*24)); 
         seconds -= days * 60 * 60 * 24; 
         var hours = Math.floor(seconds/(60*60)); 
         seconds -= hours * 60 * 60; 
         var minutes = Math.floor(seconds/60); 
         seconds -= minutes * 60; 

         if(days < 1){ days=""; } 
         $(this).find("#countDown").html(days + "<pre> Days</pre> " + hours + "<pre>:</pre>" + minutes + "<pre>:</pre>" + seconds); 
         if(days > 1){ 
           $(this).find("#countDown").css({ 
             'color':'#2A7F15', 
             'font-weight':'bold' 
           }); 
         }; 
         if(days < 1){ 
           $(this).find('#countDown').css('color','red'); 
           $(this).find('#countDown pre:nth-of-type(1)').css('display','none'); 
         } 
         if(seconds < 10){ $(this).find("#countDown").append("&nbsp;"); }; 
         if(minutes < 60){ interval = 1000; }; 
       } 
       i++; 
     }); 
     setInterval(countdownProcedure,interval); 
}; 

不过,我的问题是,我试图让这个功能来运行(现实每秒或30),以便显示的时间将更新,因此“倒计时” 。我遇到的问题是在Firefox和safari中,浏览器在第一次倒计时后才挂起,而Chrome没有任何操作(我想它有一个安全的警卫来阻止它挂起)。

任何帮助将不胜感激!

+0

为什么你连续地从元件的上下文搜索的ID 50我是否理解你有重复的ID值? *请说不,但我有怪异的感觉,你会说是的* – rlemon

回答

3

您正在运行多个setInterval()调用,因此事件队列中充斥着您的函数。

我想,你的意思是更像setTimeout()在你的函数结束。

function countdownProcedure(){ 
    // all your logic 
    setTimeout(countdownProcedure,interval); 
}; 

所不同的是,setInterval()将运行代码每x秒,直到你告诉它停下来。

setTimeout()另一方面,只需在x秒后运行您的代码

-1

我认为你的算法是错误的。您正在递归地设置每次调用自己的时间间隔,并设置新的时间间隔,等等...... 您必须稍微更改一下您的算法以使其清晰。

0

更改为clases防爆所有ID:#sqbTimestamp.sqbTimestamp

HTML文档中

,如果你设定相同的ID多个元素,意想不到的结果应该只存在1个元素与一些ID,(作为浏览器挂起)可能发生。

此外,要设置天=“”和然后执行下列操作比较如果(天> 1)

+0

虽然这是一个有效的评论,我怀疑浏览器挂在重复ID。问题在于,当您使用该ID时,您无法确定您访问哪个元素。 – Sirko

+0

同意,浏览器*挂起*绝对是堆栈超时。我以前见过这个。但是,所有这些点都是有效的。也许可以考虑将其转换为评论。 – rlemon

+0

你说得对,也许我的英语不太好。我认为每次执行setInterval执行每一行都会重置时间,这将导致挂起。 – Aguardientico