2010-10-23 12 views
9

Mam javascript, który zajmuje około 2 sekund (złożony algorytm optymalizacji). Chcę ustawić określony zakres na "działanie ..." na początku funkcji. Obserwuję, że zakres nie zmienia się do końca funkcji.Wymuś natychmiastową aktualizację DOM zmodyfikowaną przez jQuery w funkcji długiego działania.

Jak mogę wymusić propagację zmian DOM? czy powinienem podchodzić do tego inaczej w całości?

Wywołuję funkcję z onclick na przycisku.

Funkcja jest coś takiego:

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

To powinno zadziałać. Czy mógłbyś podać link do niedziałającego kodu? – lonesomeday

Odpowiedz

11

Spróbuj zawijania długiej kod uruchomiony w wywołaniu setTimeout:

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

Zmusza to nowy stos wywołań dla dłuższej kod uruchomiony, umożliwiając repaint (zmiana tekstu), aby zakończyć przed rozpoczęciem nowego stosu wywołań.