プロが教えるわが家の防犯対策術!

var count = 0;
while(count < 8){
 document.images[nam].src = menu[count].src;
 Wait(200);
 count += 1;
}

javascriptを始めたばかりでソースにまとまりがないので一部の抜粋で申し訳ありません。
「Wait」という関数は引数ミリ秒間ループを繰り返すものです。

上記のプログラムは0.2秒間隔で画像が変わっていく、というもののつもりなんですが、
実際は200*8ミリ秒後にmenu[7].srcで指定された画像に切り替わるだけになってしまっています。
問題があるとしたらどの部分なのでしょうか?
一応ブラウザ上でのエラーは無く、menu配列の中身も確認済みです。

不明な点がありましたら補足要求お願いします。

A 回答 (2件)

質問文中のスクリプトについては、具体的な動作がつかめないので、なぜ質問にあるような動作になるのかは、ちょっとわかりません。


Wait()関数の中身も含めたスクリプト全体がわからないことには、どうなっているかつかみにくいです。 こちらのソースを元にして修正するのであれば、スクリプト全体を見直してみる必要があるでしょう。


先の方の回答へのお礼にあるスクリプトの動作についてですが(横槍失礼します)、2点まずいところがあるように思います。
一点は、document.write()メソッドを使っている部分、もう一点はsetTimeout()関数の中で指定している処理内容の記述の仕方が気になります。

エラーの直接の原因になっているのは、ご推察の通りdocument.write()でcountを書き出している点だと思います。 document.write()は、一度ページがロードされたあとに内容を追記するということが、基本的にはできません。 ページロード後にこれを実行した場合、それまでに読み込まれた内容を破棄してその内容を書き出すため、Javascriptの内容もすべて破棄してしまい、動作しなくなるように思います(実行後の停止したページでHTMLソースを表示してみると解りやすいと思います。その時に表示されるソースが、その時点でブラウザが参照しているソースです。)。
できればこの動作は、他のやり方で確認するのが良いと思います。 元の「document.images[name].src = menu[count].src;」で確認してはいかがでしょうか。

あと、setTimeout()の書式ですが、このままだと引数が二回目以降に正常に引き渡されずにエラーになる可能性があると思います。 setTimeout()の第一引数が「"TimerEvent(name)"」と書かれていますが、ここでnameが変数として認識されない(無視される)可能性が残るでしょう。 ここは、イベントハンドラ内で変数を引数とした関数を指定するときと同じような書式に直す必要があります。
具体的には、

setTimeout("TimerEvent('"+name+"')", 1000);

のように、文字列と変数値の扱いを混同されないように修正すると良いと思います。

参考になれば。 失礼しました。
    • good
    • 0
この回答へのお礼

うまくいきました!
ありがとうございます。

配列使ってる部分でのミスの可能性を無くそうとText使ってみたのが裏目に出てましたね(汗
('"+name+"')の部分がまだよく理解できてないのでこれから勉強してみようと思います。

ありがとうございました。

お礼日時:2003/10/05 20:30

タイマを使いましょう。



<script language="javascript">
var count = 0;
setTimeout("TimerEvent()",200);
function TimerEvent(){
document.forms[0].elements[0].value = count;
count=count + 1
if(count < 8)
setTimeout('TimerEvent()', 500)
}
</script>
<form>
<input>
</form>
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
タイマなんて物があったんですか。
とりあえず、ほぼコピペで試したのですがうまくいきませんでした。
画像を使ってるといまいち判り難いので以下のようなテキストでのプログラムに変更して色々試してみました。

function TimerEvent(name){
 document.write(count);
 count = count + 1;
 if(count < 8) {
  TimeID = setTimeout("TimerEvent(name)", 1000);
 }
}

function In(name) {
 count = 0;
 TimerEvent(name);
}

実行結果は、画面に「0」という文字が出た1秒後にエラーになりました。document.write(count);の行をコメントアウトするとエラーは無くなるので恐らく2回目のdocument.writeでエラーが発生していると思うのですが、自力では対処できませんでした。

ご教授お願いします。

お礼日時:2003/10/03 21:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!