2013-08-31 44 views
1
for (var i = 0; i < dataArray.length; i++) { 
     if(((i/dataArray.length)*100)%10 == 0) 
      $("#progressbar").progressbar({ value: (i/dataArray.length) * 100 }); 
     if (resultArray.indexOf(dataArray[i]) == -1) // check for duplicates 
      resultArray.push(dataArray[i]); 
} 

我添加了if語句,因爲我不想更新每個循環上的進度條。該循環運行近22.2萬次。是否有更好的邏輯來更新進度?Progressbar的進度在循環內不更新

爲什麼它永遠不會輸入if語句?

+0

只是一個註釋,你可以將'$(「#progressbar」)'緩存在循環外的變量中,所以你不必在每個循環中調用它。 – Sergio

+1

什麼是dataArray?顯示你的標記。 –

回答

1

你可以利用這一點,只是有點從您的代碼優化:

prog_bar = $("#progressbar"); 
for (var i = 0; i < dataArray.length; i++) { 
     if(i%100 == 0) 
     prog_bar.progressbar({ value: (i/dataArray.length) * 100 }); 
     //other code.. 
} 

你會使用一個循環?沒有什麼「暫停」這個循環,所以它運行得非常快,你可能只是看到它在100%,而不是增長。

演示here

你可以改爲調用(而非for循環)的功能來更新進度條,爲您的「其他代碼」運行:

var i = 0; 
function update_progress_bar() { 
    if (i % 100 == 0) { 
     prog_bar.progressbar({ 
      value: (i/10000) * 100 
     }); 
    } 
    i++; 
} 

喜歡的東西this fiddle

+1

即使循環中的其他活動需要時間,它也不會顯示進度條,因爲UI線程不會得到任何時間tp執行 –

+0

@ArunPJohny確實我只是想過。我將如何解決這個問題? – Omar

+0

@Omar,它取決於你的代碼,在其他代碼中發生了什麼? – Sergio