我想要做的是在执行一个耗时3-12秒的脚本(没有AJAX),更新一个简单的div以显示“正在处理...”,然后在完成后将div更新为“完成!”。
我发现div永远不会更新为“正在处理...”。如果我在该命令之后立即设置断点,则div文本确实会得到更新,因此我知道语法是正确的。在IE9、FF6和Chrome13中都有相同的行为。
即使绕过jQuery并使用基本的原始JavaScript,我也看到了相同的问题。
你可能认为这个问题有一个简单的答案。然而,由于jQuery的.html()和.text()没有回调钩子,所以这不是一个选项。它也不是动画的,所以没有.queue可以操作。
您可以使用我准备的示例代码自行测试,该代码显示了具有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>