對於一個簡單的項目,我試圖在textarea中顯示日誌輸出。我有一個log
函數,並且希望textarea在調用log
時總是立即更新。不幸的是,它似乎只執行一次更新,並且同時推送所有內容(如果可能很重要,我使用JQuery來設置textarea的值)。這裏有一個簡單的例子:立即在Javascript中更新DOM元素
for (i = 0; i <= 100; i++) {
$("textarea").html($("textarea").html() + "test" + i + "\n");
$("textarea").scrollTop(9999999)
};
這一次吐出來的所有文本到文本區域(注意:你可以看到這些例子在這個jsfiddle的結果)。這個簡單的例子很容易通過創建一個超時,並使用遞歸函數調用補救:
f = function(i) {
if (i <= 100) {
$("textarea").html($("textarea").html() + "test" + i + "\n");
$("textarea").scrollTop(999999);
setTimeout(function() { f(i+1); }, 0);
}
};
f(1);
這個版本吐出來的是文成一次textarea的一個線,這是我想要的。但以這種方式使用超時和回調在記錄設置中似乎並不實際;每次我打電話給log
時,我都必須提供一個回調函數,以便我要遵循日誌調用。
有什麼方法可以在沒有回調的情況下達到預期的效果嗎?
那麼,你的第一個片段是如此之快,它似乎它一次添加文本... – 2011-04-24 20:46:42
你究竟想完成什麼?計算機速度越快,無論如何可以觀察到的影響越小。我不明白爲什麼你會喜歡所有額外的重繪。 – pimvdb 2011-04-24 20:48:48
夥計們,我認爲他希望能夠「看到」所有逐個發出的消息(因此他可以看到發生了什麼),因爲他必須緩衝記錄的消息並打印期刊..看到我的回答 – dwarfy 2011-04-24 21:08:34