在长时间运行的函数中强制使用jQuery修改即时DOM更新

THX*_*138 9 javascript jquery long-running-processes

我有一个javascript需要大约2秒钟来执行(复杂的优化算法).我想在函数的开头将某个范围设置为"working ...".我发现直到函数结束时,跨度才会改变.

如何强制DOM更改传播?或者我应该一起解决这个问题?

我通过onclick按钮调用该功能.

功能如下:

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

小智 11

尝试在setTimeout调用中包装长时间运行的代码:

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

这会强制为长时间运行的代码创建一个新的调用堆栈,允许在新的调用堆栈开始执行之前完成重绘(更改文本).