VBScriptについて質問です。


リアルタイムに処理のログを表示するような
TextAreaを作りたいと思っています。

以下のようなサンプルを書いてみたのですが、
処理がすべて終わってから再描画されてしまい
意図した動きになりません。

どのように解決すればよいか教えてください。
>|html|
<html>
<head>
<title>Log Viewer</title>
<script language="VBScript" />
Function append()
logs.value = logs.value & "aaaa" & vbcrlf
MsgBox ""
End Function

Function push()
For i = 0 to 100
append()
Next
End Function

</script>
</head>
<body>
<textarea id="logs" col="50" rows="10"></textarea>
<input type="button" value="push" onclick="vbscript:push()" />
</body>
</html>
||<

回答の条件
  • 1人5回まで
  • 登録:2007/08/15 11:02:21
  • 終了:2007/08/22 00:07:45

ベストアンサー

id:F-15X No.3

F-15X回答回数111ベストアンサー獲得回数132007/08/15 12:45:09

ポイント40pt

setTimeoutを使用してみては?

例えば、

<script language="VBScript" />

Const CNT_MAX = 10

Const INTERVAL = 20

Dim idTimer

Dim cnt

Function append()

    window.clearTimeout(idTimer) 

    logs.value = logs.value & "aaaa" & vbcrlf

    cnt = cnt + 1

    If cnt >= CNT_MAX then

        Exit Function

    End If

    idTimer = window.setTimeout("append", INTERVAL, "VBScript") 

End Function

Function push()

    cnt = 0

    Call append()

End Function

</script>

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982007/08/15 11:25:31

ポイント20pt

最後に MsgBox を出したいのならば

For i = 0 to 100

append()

Next

この後に 入れないとダメです。


For i = 0 to 100

append()

Next

MsgBox ""

といった感じです。

id:kanouk

やりたいことは"aaaa"という文字列が

TextAreaに対して一行一行更新されることです。

MsgBoxの行はデバッグ用途でいれたので、

質問の意図とは関係がありません。

質問がわかりにくくてすいません…。

2007/08/15 11:32:51
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/08/15 11:48:07

ポイント20pt

XP SP2/IE6 の環境では、正常動作しています。

MsgBox logs.value しにしてタイミングを見てみましたが、

MsgBox の表示とtextarea id="logs"の表示更新は

同時でした。

id:kanouk

回答ありがとうございます。

ちなみにMsgBoxの行をコメントアウトしても

リアルタイムに表示更新されますでしょうか?

ちなみに当方の環境は2000SP4/IE6です。

2007/08/15 12:08:28
id:F-15X No.3

F-15X回答回数111ベストアンサー獲得回数132007/08/15 12:45:09ここでベストアンサー

ポイント40pt

setTimeoutを使用してみては?

例えば、

<script language="VBScript" />

Const CNT_MAX = 10

Const INTERVAL = 20

Dim idTimer

Dim cnt

Function append()

    window.clearTimeout(idTimer) 

    logs.value = logs.value & "aaaa" & vbcrlf

    cnt = cnt + 1

    If cnt >= CNT_MAX then

        Exit Function

    End If

    idTimer = window.setTimeout("append", INTERVAL, "VBScript") 

End Function

Function push()

    cnt = 0

    Call append()

End Function

</script>

  • id:taknt
    ダイアログボックスが 表示されたときに aaaa って追加されていったけど?
  • id:kanouk
    すいません。中途半端な状態で投稿してしまいました。
    質問で意図していたソースは
    MsgBoxの行をコメントアウトしたものです。

    「MsgBoxの行をいれると一行ずつ表示されるのですが…」
    と追記しようと思っていました。
  • id:taknt
    >やりたいことは"aaaa"という文字列が
    TextAreaに対して一行一行更新されることです

    プログラムを見ると TextAreaに "aaaa"+改行を 追加してますが


    一行一行更新とは どういうことでしょうか?

    追加でないならば
    logs.value = logs.value & "aaaa" & vbcrlf

    logs.value = "aaaa"

    とすればいいだけですが・・・。



  • id:kanouk
    たびたび申し訳ないです。

    追加でよいのですが、追加されている状態を
    リアルタイムに表示させたいのです。

    たとえば、For文のループ回数を1000回くらいにすると
    しばらく経ってから(すべてのループが終わってから)
    1000行の結果がTextAreaに表示されますが、
    そうではなくて、常にその時点でのlogs.valueの値を
    TextAreaに表示しておきたいということです。

    わかりにくくてすいません。
  • id:KUROX
    >ちなみにMsgBoxの行をコメントアウトしても
    >リアルタイムに表示更新されますでしょうか?
    >ちなみに当方の環境は2000SP4/IE6です。

    されます。Xp-SP2/IE6です。
  • id:F-15X
    KUROXさんと同じ環境ですが、ループ終了後に表示されます。(参考まで)
  • id:KUROX
    ごめんなさい。
    100件ループしてるけど1件ずつ表示されるか?と言うおはな
    しですか?

    ループ終了後に表示されます。

    -------------------------
    出かけるので、それまでに終わってなければお会いしましょう。
  • id:KUROX
    私もTimerを使うしか方法を思いつきません。
    ソースは今は思いつきませんが。
    でも、この場合環境によってちゃんと動作するのか
    不安が残ると思います。

  • id:F-15X
    JavaScriptはクライアントサイドで動作する以上、クライアント環境に依存します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません