2016-07-22 49 views
2

我想弄清楚,如何寫入從「實時」的div div。當我運行代碼時,循環中的任何文本只有在兩個循環都執行完畢後纔會顯示,但實際上(我想我寫的)的方式,它應該逐行顯示出來。從javascript循環寫入「當它發生」

看到一個例子.JsFiddle Demo

我想它的工作就像在Chrome開發者工具的控制檯,讓您馬上看到什麼(使用的console.log)發生。

我知道我可以把它全部放到一個字符串或數組中,並在循環之外一次打印出來,但是我真的需要在發生這種情況時看到它。

我確定在某個地方必須有解決方案,但我找不到任何線索(可能沒有使用適合谷歌的詞語)。任何信息將不勝感激。

編輯: 在控制檯中所做的輸出和HTML一樣,使其少混亂,以便更好地比較 JSFiddle Demo 2

+0

你說的 「馬上」 的意思嗎?它實際上是「馬上」發生的,但它實際上很快,你看不到它。 while循環正在發生,並且正在逐個打印控制檯消息以及div元素,但它的速度非常快,看起來好像是在立即執行。你想在它們之間增加某種延遲嗎? – briosheje

+0

有三個循環用完..你想打印字符串的位置? – Poonam

+0

@briosheje:抱歉,不清楚:無論您添加多少次重複循環,都可以一個接一個地看到console.log。然而,appendTo(作爲其中一種可能性)似乎並沒有這樣做。只有整個代碼執行完畢,我纔將所有字符串看作一個字符串。 – TheRealPir

回答

2

的問題是,你的while循環是快速。你不會看到輸出。瀏覽器需要一些時間來更新文檔。你可以在控制檯中逐個看到它的原因,僅僅是因爲控制檯要慢。控制檯輸出延遲線。當您看到控制檯中的最後一個條目正在啓動時,您的代碼已經很久之前就結束了。您的代碼執行速度比控制檯更快。所以這也不是時間

顯示控制檯的真實速度非常簡單。看看this example。執行時,會有一個簡單的循環在控制檯中創建日誌條目。之後,我們只打印loop finished的內容。當您在文檔中看到輸出時,即使腳本已停止,控制檯仍會打印行。

您現在可以嘗試在循環執行中給瀏覽器一些時間來輸出數據並讓瀏覽器呈現更改。但是因爲你在那裏使用了循環,所以在開始下一個循環之前,你不能將它設置爲異步或者延遲輸出值。但是,在打印下一行之前,您可以將代碼切換爲自動執行的功能,並在瀏覽器中平滑一點點時間以實現平滑輸出。

如果你創建了這樣的大循環,你應該真正照顧你的代碼。讓jQuery再次搜索每個循環中的#log div並不是一個好主意。在循環之前只做一次。並且不要爲這個簡單的字符串操作使用數組。這會讓它變得更慢。

var log = $("#log"); 
var generateTestCases = 3000; 

(function next(amount) { 
    if(amount) { 
     var repeatIF2 = 10; 
     var trackingString = amount + ";"; 

     (function output(count) { 
      if(count) { 
       trackingString += count + ";"; 
       log.append('<div>' + trackingString + '</div>'); 

       if(--count) { 
        // this line slows down the output 
        // change the time for faster or slower output 
        setTimeout(output, 50, count); 
       } else { 
        next(--amount); 
       } 
      } 
     })(repeatIF2); 
    } 
})(generateTestCases); 

Working example.

+0

結果正是我所期待的。我只是將setTimeout設置爲0,因爲我所關心的是我看到代碼正在執行。你能詳細闡述一下「while循環太快」嗎?在我的舊代碼中,我在控制檯中看到一行一行,但在瀏覽器中一直沒有結束。最後,我同時在瀏覽器中看到了一行內容,而控制檯仍在完成。但是,如果while循環如此之快,爲什麼他們不能以比控制檯更快的速度在網站上打印?它們在同一個循環中...... – TheRealPir

+0

請再次閱讀我的答案的第一個塊。控制檯不及時*,控制檯只是慢。控制檯打印出的行比執行循環要慢得多。當你看到控制檯中的最後一行時,你真正的執行結束了很長時間...... – eisbehr

+0

我爲你創建了第二個例子@TheRealPir,以證明控制檯真的很慢。在新的第二段中看看我的原始答案。 – eisbehr