Вот решение.Я не уверен, работает ли он во всех браузерах, вы можете протестировать его в нескольких, но я думаю, что это так:
$(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;
};
});
По сути, браузер не будет отображать какие-либо изменения, пока скриптзаканчивает выполнениеЭто позволяет вам делать такие вещи, как:
- Скрыть все div с определенным классом
- Показать один из этих div
в строке и в браузереникогда не будет отображать div, который отображается как скрытый, поэтому вы не получите странных мерцаний или движущихся вещей на странице.
Используя setTimeout, как я, анонимный обработчик кликов завершит работу, браузербудет выполнен повторный рендеринг, будет запущена анонимная функция в setTimeout (сразу после рендеринга, так как нет фактической задержки).