元の質問には 2 つの問題があるようです。1) スリープ機能は、HTML 要求などの長時間実行される操作を適切にシミュレートしませんでした。2) IE、少なくとも v8 と v9 では、Firefox のように表示が正しく更新されないようです。IE に UI の更新を強制的に処理させる方法を知っている人はいますか? 以下は Firefox で正常に動作しますが、一時停止を強制するアラートを挿入しない限り、IE は実行中のカウントの表示を最後まで更新しません。50 個のアイテムがあり、バッチ サイズが 10 の場合、実行中のカウントを表示する HTML に 10、20、30、40、50 を表示する必要がありました。IE では、最後に 10 から 50 にジャンプしますが、Firefox は正しく更新されます。
while (done == false) {
var url = 'myLongRunningOperation.com/doSomething.html&LastID='+lastPriorIndex;
$.ajax({
type: 'GET',
url: url,
dataType: 'json',
success: function(data) {
soFar += data.Succeeded + data.Failed;
$('#numCompleted').val(soFar).show();
LastPriorIndex= data.LastID;
if (soFar >= totalNumberOFDocs) {
done = true;
}
},
data: {},
async: false
});
}
JQuery UI モーダル ダイアログをステータス ダイアログとして使用しようとしています。最初に表示し、次に実行時間の長い操作が完了して HTML に追加するときに更新メッセージを処理します。ただし、ダイアログは最後まで表示されず、すべてのメッセージが表示されます。ダイアログを表示した直後にアラートを入れると表示されますが、操作がすべて完了した後、メッセージの更新がすべて一度に表示されます。アラートによってダイアログが表示されるため、メッセージキューをチェックして更新する機能が必要なだけだと思っています。あるいは、スリープをシミュレートする際の問題は、ログ実行操作をシミュレートする私の方法です。
$(function() {
$("#dialog2").dialog({
bgiframe: false
,height: 140
,modal: true
,autoOpen: false
});
});
function TestModalUpdate2() {
$('#dialog2').dialog("open");
//alert('foo'); //if this alert is present the dialog shows before the doSomething calls execute but wont update till all of them are done
$('#dialog2').show();
var i
for(i = 0; i < 5; i++) {
doSomething($('#dialog2'));
$('#dialog2').show();
}
}
function doSomething(obj1) {
wait(1000);
obj1.html(obj1.html()+"<p>new line</p>")
//alert('this will also cause the dialog to update in between doSomethings')
}
function wait(msecs) {
var start = new Date().getTime();
var cur = start
while(cur - start < msecs) {
cur = new Date().getTime();
}
}
<input type="button" id="Test2" onclick="TestModalUpdate2();" value="Test2"/>