怎么警告让javascript中断?我可以用代码吗?

时间:2013-04-19 17:48:37

标签: javascript jquery

我正在为处理不同方法的4000个元素处理一种“大”JSON对象,我想用显示该过程的文本更新div标记。

但由于某些奇怪的原因(仅在Firefox和Chrome中测试过),他们不会使用文本更新DOM对象。

$("#estatusBar").text(_item.Centro_de_trabajo);

两者都喜欢继续计算所有数据和其他过程,而不花时间更新文本。但是,如果我只是在循环中编码Alert(""),然后在chrome中点击“选中的框”,说明忽略所有其他警报,Chrome会突然开始更新文本。

所以我在想是否可以用某种代码“暂停”计算来停止和更新DOM元素,然后继续进行其他过程?

这是可能的还是这种奇怪行为的替代方法?

- 编辑 -

这是循环的代码

    $.each(plantillas, function(_index, _item){
        updateBar(_item.Centro_de_trabajo);
        calculateItem(_item,_index);
        a.push("<div class='blockee'><ul>"+ /*temp.join("")*/ t(_item) +"</ul></div>");
    }); 

3 个答案:

答案 0 :(得分:1)

您可以尝试使用web workers,将计算推迟到后台,这可以帮助您。 Web工作者的目的是做这件事(将大型计算推送到后台线程)。但是,这可能不适用于所有浏览器。您主要关注的是IE,只有IE 10支持它:

enter image description here

答案 1 :(得分:1)

不,你不能做什么警报。在某些情况下,这种限制真的很烦人,但如果你的问题只是一次长计算的进展,那么解决方案很简单。

而不是在一个循环中执行记录,而是在“足够小”的块中进行计算,然后执行类似

的操作
function doit()
{
    processBlockOfRecords();
    updateProgressBar();
    if (!finished()) {
        setTimeout(doit, 0);
    }
}

setTimeout(doit, 0);

使用此方法添加“中止”按钮以停止计算也很简单。

在你的例子中,循环是

$.each(plantillas, function(_index, _item){
    updateBar(_item.Centro_de_trabajo);
    calculateItem(_item,_index);
    a.push("<div class='blockee'><ul>"+ /*temp.join("")*/ t(_item) +"</ul></div>");
});

所以计算可以用(未经测试的)

分割
function processRecords(plantillas, completion_callback) {
    var processed = 0;
    var result = [];

    function doit() {
        // Process up to 20 records at a time
        for (var i=0; i<20 && processed<plantillas.length; i++) {
            calculateItem(plantillas[processed], processed);
            result.push("<div class='blockee'><ul>" +
                        t(plantillas[processed]) +
                        "</ul></div>");
            processed++;
        }

        // Progress bar update
        updateProgress(processed, plantillas.length);

        if (processed < plantillas.length) {
            // Not finished, schedule another block
            setTimeout(doit, 0);
        } else {
            // Processing complete... inform caller
            if (completion_callback) completion_callback(result);
        }
    }

    // Schedule computation start
    setTimeout(doit, 0);
}

答案 2 :(得分:0)

你想在javascript中使用某种版本的等待或暂停或睡眠或类似的东西吗?

唯一的方法是

window.setTimeout()

您可以暂停任何功能。

检查这篇文章也可能有所帮助: Sleep/Pause/Wait in Javascript