2010-10-23 18 views
9

我有一個JavaScript,需要大約2秒才能執行(複雜優化算法)。 我想在函數的開始處將某個跨度設置爲「working ...」。我觀察到,直到函數結束時,量程不會改變。在長時間運行的函數中強制使用jQuery修改即時DOM更新

如何強制DOM更改傳播?或者我應該以不同的方式處理這些問題?

我從按鈕上的onclick調用函數。

的功能是一樣的東西:

function optimize() { 
    $('#status').text('working...'); 
    // calculate for 2 seconds 
    $('#status').text('done!'); 
} 
+0

這應該工作。你能給一個鏈接到無功能的代碼嗎? – lonesomeday 2010-10-23 17:15:29

回答

11

嘗試在setTimeout調用包裝長時間運行的代碼:

function optimize() { 
    $('#status').text('working...'); 
    window.setTimeout(function() { 
     // calculate for 2 seconds 
     $('#status').text('done!'); 
    }, 0); 
} 

這迫使了長時間運行的代碼,一個新的調用堆棧,使重繪(改變文本)在新的調用堆棧開始執行之前完成。

相關問題