javascript - 如何在进行冗长的 JavaScript 计算时强制更新浏览器中的 UI?

标签 javascript jquery browser

我在网络应用程序中有一个位置,在浏览器中使用 JavaScript 进行大量计算。。它们可能需要不到一秒到大约一分钟的时间来运行,我想在此步骤中显示一个进度对话框,但该对话框直到我的计算完成后才会显示。我首先尝试显示一个 jquery 对话框:

HTML:

<input type="button" id="startwork" value="Start working">

<div id="dialog" title="My dialog">
    This should show up immediately on clicking the button.
</div>

脚本:

$(function() {

    $("#startwork").click(function () {
        $("#dialog").dialog("open");
        // Do some lengthy calculations
        for (var i=0; i<1000000000; i++) {
            var foo = Math.random();   
        }
        $("#dialog").dialog("close");
        alert("done");
    });

    $("#dialog").dialog({ autoOpen: false });

});

如何强制 UI 在计算开始之前以及计算过程中按照定义的时间间隔进行更新?

最佳答案

将冗长的计算封装在 setTimeout 中:

setTimeout(function() {
// some length calculations
}, 0);

setTimeout 之后不应再有任何脚本。

$(function() {

    $("#startwork").click(function () {
        $("#dialog").dialog("open");
        setTimeout(function() {
            // some length calculations
            for (var i=0; i<1000000000; i++) {
                var foo = Math.random();   
            }
            $("#dialog").dialog("close");
            alert("done");
        }, 0);
    });

    $("#dialog").dialog({ autoOpen: false });

});

关于javascript - 如何在进行冗长的 JavaScript 计算时强制更新浏览器中的 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989734/

相关文章:

javascript - 无法删除(绑定(bind)的)事件监听器

javascript - Jquery onclick事件图标颜色没有改变

javascript - jquery点击事件没有触发

jquery - 行重新排序在 Datatable jquery 插件中不起作用

javascript - 可以向网络浏览器发出 HTTP 请求吗?

javascript - Python 类 JavaScript 中的函数模拟

javascript - 如何让新的 Facebook Javascript SDK 在 IE8 中运行?

c# - WebBrowser 通过 html 中的链接在内部存储的 html 资源之间导航

asp.net - Web浏览器锁定: How to?

javascript - onsubmit内部没有调用JS表单验证函数