• ベストアンサー

javascriptで処理している間画像を表示したい。

JavaScriptで処理をしている間、画像を表示したいのですが、 上手く表示されません。 以下、HTMLファイル <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="sample_csv.js"></script> </head> <body> <form name="form1"> <input type="button" value="取込" onclick="testWait()"/> </form> <p id="test"></p> </body> </html> 以下JSファイル function testWait() { var imgWait = document.createElement('img'); imgWait.setAttribute("src","data/waiting.gif"); document.getElementById("test").appendChild(imgWait); //alert("test"); sleep_busy(5000); document.getElementById("test").innerHTML = ""; } function sleep_busy(wait) { var start = (new Date()).getTime(); while (true) { if ((new Date()).getTime() >= start + wait * 1) break; } } jsファイルのコメントしてあるアラート文を有効にすると きちんと表示されます。 どうしてalert文を有効にした場合と、コメントにした場合で 結果が違ってきてしまうのでしょうか。 上手く表示する、良い方法ありますでしょうか。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

javascriptで処理が行われている間はレンダリングが行わない。よって画像表示が反映されない。 alertを挟むことで、いったん処理が途切れるのでレンダリングが実行される。 ってな事だと思う。 sleep_busy(5000); ↓ setTimeout(function(){ sleep_busy(5000); document.getElementById("test").innerHTML = ""; },1); こんな風にタイマーをかけて処理を呼び出してみてください。 確認してないのでダメだったら失礼。

take_july
質問者

お礼

上記のままで解決できました。 有難うございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ビジーにしなくても以下でよいのでは? function testWait(){ var imgWait = document.createElement('img'); imgWait.setAttribute("src","data/waiting.gif"); document.getElementById("test").appendChild(imgWait); setTimeout('document.getElementById("test").innerHTML=""',5000); }

take_july
質問者

お礼

解決できました。 有難うございました。

関連するQ&A

専門家に質問してみよう