То, что я пытаюсь сделать, - это обновить простой div, чтобы сказать "Обработка..." перед выполнением интенсивного процессора script (требуется 3-12 секунд для запуска, без AJAX), а затем обновить div сказать "Закончено!" когда сделано.
Я вижу, что div никогда не обновляется с помощью "Обработка..." . Если я установил точку останова сразу после этой команды, тогда текст div будет обновлен, поэтому я знаю, что синтаксис верен. Такое же поведение в IE9, FF6, Chrome13.
Даже при обходе jQuery и использовании основного исходного Javascript я вижу ту же проблему.
Вы бы подумали, что у этого будет легкий ответ. Однако, поскольку jQuery.html() и .text() не имеют крючка обратного вызова, это не опция. Он также не анимирован, поэтому манипулировать не нужно.
Вы можете проверить это сами, используя приведенный ниже пример кода, который показывает как реализацию jQuery, так и Javascript с 5-секундной высокопроцентной функцией. Код легко проследить. Когда вы нажимаете кнопку или ссылку, вы никогда не увидите "Обработка..."
<!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>