Принудительное немедленное обновление DOM, измененное с помощью jQuery в долго выполняющейся функции - PullRequest
9 голосов
/ 23 октября 2010

У меня есть JavaScript, выполнение которого занимает около 2 секунд (сложный алгоритм оптимизации). Я хочу установить определенный интервал на «рабочий ...» в начале функции. Я заметил, что диапазон не меняется до конца функции.

Как я могу заставить распространение изменений DOM? или мне все это подойти по-другому?

Я вызываю функцию с помощью нажатия на кнопку.

Функция выглядит примерно так:

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

1 Ответ

11 голосов
/ 23 октября 2010

Попробуйте обернуть долго выполняющийся код в вызов setTimeout:

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

Это заставляет новый стек вызовов для долго выполняющегося кода, позволяя перерисовке (изменению текста) завершиться до нового вызова.стек начинает выполнение.

...