2013-07-03 119 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