Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在长时间运行的事件中更新页面元素?_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript 如何在长时间运行的事件中更新页面元素?

Javascript 如何在长时间运行的事件中更新页面元素?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我有一个长时间运行的方法——我想向用户指示操作正在进行。这不是和ajax调用,所以我不能使用我过去使用的常见模式在ajax事件之前显示(比如微调器),然后在成功时隐藏它 在我的例子中——我不是在做ajax调用,而是在做一些非常繁重的DOM操作 我在jsFiddle.net上有一个测试示例——我很想学习如何捕获事件。目前,我的“wait message”div在操作完成的同一时间更新,这太晚了:( 完整的示例代码如下: Javascript(jQuery) $(文档).ready(函数(){ $(

我有一个长时间运行的方法——我想向用户指示操作正在进行。这不是和ajax调用,所以我不能使用我过去使用的常见模式在ajax事件之前显示(比如微调器),然后在成功时隐藏它

在我的例子中——我不是在做ajax调用,而是在做一些非常繁重的DOM操作

我在jsFiddle.net上有一个测试示例——我很想学习如何捕获事件。目前,我的“wait message”div在操作完成的同一时间更新,这太晚了:(

完整的示例代码如下:

Javascript(jQuery)

$(文档).ready(函数(){
$(“#链接操作”)。单击(函数(e){
$(“#等待消息”).text(“开始…”);
var计数=longRunningMethod(100000000);
$(“#结果”)。文本(计数);
$(“#等待消息”).text(“已完成”);
});
var longRunningMethod=函数(倒计时){
var i=0;

虽然(i这里有一个解决方案。我不确定它是否适用于所有浏览器,您可能想在几个浏览器中测试它,但我认为它确实适用:

$(document).ready(function() {

    $("#link-action").click(function(e) {

        $("#wait-message").text("starting ...");

        // Stuff to do after a render
        setTimeout(function(){
            var count = longRunningMethod(1000000000);

            $("#result").text(count);
            $("#wait-message").text("completed.");
        }, 0);
    });


    var longRunningMethod = function(countUpTo) {
        var i = 0;
        while (i <= countUpTo) {

            i++;
        }

        return i;

    };
});
$(文档).ready(函数(){
$(“#链接操作”)。单击(函数(e){
$(“#等待消息”).text(“开始…”);
//渲染后要做的事情
setTimeout(函数(){
var计数=longRunningMethod(100000000);
$(“#结果”)。文本(计数);
$(“#等待消息”).text(“已完成”);
}, 0);
});
var longRunningMethod=函数(倒计时){
var i=0;

while(我使用setTimeout或setInterval而不是while循环;一个亚秒级的延迟(如15毫秒)应该足以防止窗口冻结/UI锁定。

对我运行FF8没有影响。@lonesomeday它在Chrome IE中对我有效。在变为“完成”之前,div中会显示“开始…”.我不确定,但可能将0更改为1会使其在FF中工作?@lonesomeday我没有Firefox自己测试它。重复:
<div id="wait-message">
    push button please 
</div>   
<hr />

<button id="link-action">Run Operation</button>

<hr />

<h1>Results:</h1>
<div id="result"> </div>   
$(document).ready(function() {

    $("#link-action").click(function(e) {

        $("#wait-message").text("starting ...");

        // Stuff to do after a render
        setTimeout(function(){
            var count = longRunningMethod(1000000000);

            $("#result").text(count);
            $("#wait-message").text("completed.");
        }, 0);
    });


    var longRunningMethod = function(countUpTo) {
        var i = 0;
        while (i <= countUpTo) {

            i++;
        }

        return i;

    };
});