jQuery / Javascript – 在进行功能之前如何等待操纵的DOM进行更新

前端之家收集整理的这篇文章主要介绍了jQuery / Javascript – 在进行功能之前如何等待操纵的DOM进行更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要做的是在执行一个cpu密集型脚本(运行3-12秒,没有 AJAX)之前更新一个简单的div来说“处理…”,然后更新div来说“完成! “完成后

我看到的是,div从来没有被更新为“Processing …”.如果我在该命令之后立即设置了一个断点,那么这个div文本会被更新,所以我知道语法是正确的. IE9,FF6,Chrome13相同的行为.

即使绕过jQuery并使用基本的原始Javascript,我也看到同样的问题.

你会认为这会有一个简单的答案.但是,由于jQuery .html()和.text()没有回调钩子,所以不是一个选项.它也没有动画,所以没有任何行动来操纵.

您可以使用我在下面准备的示例代码来测试这个,它显示了具有5秒高cpu功能的jQuery和Javascript实现.代码很容易遵循.当您点击按钮或链接时,您将看不到“处理中…”

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" ></script>
<script type="text/javascript">
function addSecs(d,s) {return new Date(d.valueOf()+s*1000);}
function doRun() {
    document.getElementById('msg').innerHTML = 'Processing JS...';
    start = new Date();
    end = addSecs(start,5);
    do {start = new Date();} while (end-start > 0);
    document.getElementById('msg').innerHTML = 'Finished JS';   
}
$(function() {
    $('button').click(function(){
        $('div').text('Processing JQ...');  
        start = new Date();
        end = addSecs(start,5);
        do {start = new Date();} while (end-start > 0);
        $('div').text('Finished JQ');   
    });
});
</script>
</head>
<body>
    <div id="msg">Not Started</div>
    <button>jQuery</button>
    <a href="#" onclick="doRun()">javascript</a>
</body>
</html>

解决方法

将其设置为处理,然后执行setTimeout以防止cpu密集型任务运行,直到div被更新.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" ></script>
<script>
function addSecs(d,s) {return new Date(d.valueOf()+s*1000);}
function doRun() {
    document.getElementById('msg').innerHTML = 'Processing JS...';
    setTimeout(function(){
         start = new Date();
         end = addSecs(start,5);
         do {start = new Date();} while (end-start > 0);
         document.getElementById('msg').innerHTML = 'Finished Processing';   
    },10);
}
$(function() {
    $('button').click(doRun);
});    
</script>
    </head>
<body>
    <div id="msg">Not Started</div>
    <button>jQuery</button>
    <a href="#" onclick="doRun()">javascript</a>
</body>
</html>

您可以根据需要修改setTimeout延迟,对于较慢的机器/浏览器可能需要更大.

编辑:

您还可以使用警报或确认对话框来允许页面更新时间.

document.getElementById('msg').innerHTML = 'Processing JS...';
if ( confirm( "This task may take several seconds. Do you wish to continue?" ) ) {
     // run code here
}
原文链接:https://www.f2er.com/jquery/179786.html

猜你在找的jQuery相关文章