代码之家  ›  专栏  ›  技术社区  ›  THX-1138

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

  •  9
  • THX-1138  · 技术社区  · 14 年前

    我有一个javascript,大约需要2秒来执行(复杂的优化算法)。 我想在函数开始时将某个跨度设置为“工作…”。 我观察到这个跨度直到函数结束才改变。

    如何强制传播DOM更改?或者我应该以不同的方式一起处理这个问题?

    我从按钮上的onclick调用函数。

    功能如下:

    function optimize() {
        $('#status').text('working...');
        // calculate for 2 seconds
        $('#status').text('done!');
    }
    
    1 回复  |  直到 14 年前
        1
  •  11
  •   Brad Daily    14 年前

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

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

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