setTimeout関数の使用方法について

このQ&Aのポイント
  • JavaScriptのsetTimeout関数を使用して、一定時間ごとに文字の表示を変化させる方法について質問です。
  • 質問者は、上記のコードを実行したが、文字の表示が変化しないという問題が発生している。
  • 質問者は、問題の原因が分からず、指摘を求めている。
回答を見る
  • ベストアンサー

setTimeout関数の使用方法について

はじめまして。 質問があります。 以下のコードを実行すると、一定時間おきに文字の表示が変化する ように動いてくれません。何が問題なのかがまったく見当がつき ません。どなたかご指摘をお願いします。 ---------------------------------------------------------------- <html> <head> <title>setTimeout()関数の使用例</title> </head> <body onLoad="timer=setTimeout('changeChar()',500)"> <script type="text/javascript"> <!-- var str = "abcdefghijklmnopqrstuvwxyz0123456789"; var cnt = 0; function changeChar() { clearTimeout(timer); ch = str.charAt(cnt++); document.write(ch); if(str.length > cnt) { timer = setTimeout("changeChar()",500); } } //--> </script> </body> </html> ----------------------------------------------------------------

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

  • ベストアンサー
回答No.1

document.write()を使うことによって changeChar自体の存在が消されてしまっているようですね。 document.write(ch); を document.getElementById('aaa').innerHTML = ch; と変更して <div id="aaa"></div> を追加してみれば動いている事は確認できると思います。 getElementByIdは古いブラウザは対応していない場合があるので その場合はdocument.all('aaa')とかdocument.layer['aaa']などを 使う事になります。

re-entry
質問者

お礼

karumakaruma様へ ご回答ありがとうございます。 まじめにすごいですね。 内心解決策がないのではないかと思っておりましたが、 このような解決法があるとは・・・ getElementById関数やdocument.all('aaa')、document.layer['aaa'] などは手元の参考書には、載っておりませんでした。 この質問をするまで、あれこれ試してみて徹夜しておりました。 勉強不足を痛感しております。 本当にありがとうございました。

関連するQ&A

  • set TImeout

    <html> <head> <title>フェードインさせたい </title> <script language="JavaScript"> <!-- r_color="000123456789abcd"; g_color="0123456789abcdef"; b_color="000123456789abcd"; function fadein(pos,speed){ clearTimeout(timer1); r=r_color.charAt(pos); g=g_color.charAt(pos); b=b_color.charAt(pos); document.bgColor="#"+r+r+g+g+b+b; if(pos<15){ timer1=setTImeout("fadein("+(pos+1)+","+speed+")",speed); }else{ clearTImeout(timer1); } } //--> </script> </head> <body text"#000000"onLoad="timer1=setTimeout('fadein(0,100)',100)"> <font size="5">フェードインします</font> </body> </html> 以上のタグが今勉強している本に載っていたのですが 最初にonloadで呼び出された関数の中にClearTImeaout (11行目)にありますがそこでこの関数はとまって しまわないのでしょうか? また二つSettimeaoutがありますが二つとも識別する 単語がtimer1で同じですけどごっちゃにならないのでしょうか?

  • 初期表示を変えるには?

    下記のようなタグで、オンマウスでフェードイン、離れればフェードアウトの設定にしたいのですが、文字が隠れた状態が初期表示にする場合はどうしたらいいんでしょうか?? 簡単なことかもしれないですが、どなたか教えてください。 <SCRIPT LANGUAGE="JavaScript"> <!-- // itv = 100; // cnt = 0; function strFade(str) { c = str.charAt(cnt++); document.all["ID"].style.color = "#"+c+c+c+c+c+c; if(cnt < str.length) setTimeout("strFade('" + str + "')",itv); if(cnt == str.length) cnt = 0; } //--> </SCRIPT> </head> <BODY> <SPAN id="ID"><span onmouseover="strFade('fedcba9876543210')" onmouseout="strFade('0123456789abcdef')">m</SPAN><BR><BR> </BODY>

  • setTimeout の動作不良?

    setTimeout の中で引用する関数が引用するカッコの中に 引用符で文字列を入れると正常に作動しますが 変数名を入れると、動作が停止してしまうようです。 Win 7 pro 上で、Firefox 、 IE11 の両方で試しましたが どちらも動きませんでした。 おそらく、setTimeout のバグではないかと個人的に考えていますが どのようにして、この問題を解決可能かを 教えて下さい。 <script> function TestA() { setTimeout( "alert('Hello')", 2000) ; } function TestQuote() { var stringQ = 'Hello' setTimeout( "alert(stringQ)", 2000) ; } function TestNoQuote() { var stringQ = 'Hello' setTimeout( alert(stringQ), 2000) ; } </script> </head> <body> <button onclick="TestA()" > Timer 1 </button> <button onclick="TestQuote()" > Timer 2 </button> <button onclick="TestNoQuote()" > Timer 3 </button>

  • このタグで文字の大きさを変えたいのですが、、、、

    <head> <title>文字色をリアルタイムに変える</title> <script Language="JavaScript"><!-- count = 0; function changeColor(str) { txt = document.all["strID"].innerText; c = str.charAt(count); txt = txt.fontcolor("#"+c+c+"0000"); document.all["strID"].innerHTML = txt; count++; if (count > str.length) count = 0; setTimeout("changeColor('"+str+"')",100); } // --></script> </head> <body onLoad="changeColor('0123456789abcdefedcba987654321')"> <div id="strID" style="font-weight:900">ここの文字の色が変わるよ~ん</div> </body>

    • ベストアンサー
    • HTML
  • setTimeoutでelementを渡す方法

    setTimeoutの引数にdocument.getElementByIdの情報を格納して 他の関数に渡すことはできないのでしょうか? 下記は自分で調べた内容ですが、aaa()で変数mにdocument.getElementByIdを格納して setTimeoutの引数にその変数を指定してbbb()に渡しましたが使うことができませんでした。 [object HTMLDivElement]は渡っているようですが、tagNameでDIVが表示されません。 ccc()のように普通に渡した場合はちゃんと使えました。 データはちゃんと送られているのに、setTimeoutではなぜtagNameなどで表示されないのでしょうか。 <html lang="ja"> <head> <title>サンプル</title> <script> function aaa() { var m = document.getElementById("xxx"); alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV var p = 777; setTimeout("bbb('"+m+"',"+p+")",1000); ccc(m,p); } function bbb(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //undefined alert(p); //777 } function ccc(m,p){ alert(m); //[object HTMLDivElement] alert(m.tagName); //DIV alert(p); //777 } </script> </head> <body onload="aaa()"> <div id="xxx">サンプル</div> </body> </html>

  • タイプライター風 part2

    以前、pesoさん、xruzさんに教えられたこと等をもとに 以下のようなscriptを作成しました。 /////// <head> <script language="javascript"> <!-- str1="わしはしばらく出てこないよーーー "; str2="しばらく出てこないよーーー "; str3="出てこないってばーーー "; blnk = "          "; str = str1+blnk; cnt=0; mcnt = 0; msg = ""; stcnt=0; i=0; timeID = 10; function type(){ if(i<=str.length){ if(document.all){ stcnt++; if (stcnt>3){ stcnt = 0; msg += str.substring(mcnt,mcnt+1); mcnt++; if (mcnt >= str.length) { mcnt=0; msg=""; } } csr = " "; if (stcnt & 1) csr ="_"; myText.innerHTML=msg+csr; } else if(document.layers) { document.myText.document.open(); document.myText.document.write(msg.substring(0,i)); document.myText.document.close(); } i=++i; clearTimeout(timeID); timeID=setTimeout("type()",50); } else{ i=0; clearTimeout(timeID); timeID=setTimeout("type()",50); } } //--> </script> </head> <body bgcolor="#cccccc" onload="type()"> <div id="myText" style="position:absolute;top:20;left:20;"></div> </body> pesoさん、xruzさん、ありがとうございました。これでほぼ、僕の作りたい スクリプトができました。(不要なところもありますが......) ですが、このままだとstr1のみしか表示されず、str2、str3は表示され ません。(当然ですが) str1を表示した後にstrにstr2、str3を入れるにはどうしたらいいので しょうか?(以前、xruzさんに教えていただいたスクリプトを永遠に 続けるような感じです。)

  • javasccriptの文字列の連結について

    javasccriptの文字列の連結について charAt()というメソッドを用いて、 以下のサンプル <html> <head> <title>for sample</title> </head> <body> <script type="text/javascript"> <!-- str ="javascript" var ch1=str.charAt(0); alert("[" + ch1 +"]") //--> </script> </body> <html> を実行した際に アラートで[j]と返ってくるのですが、 (1)alert("[" + ch1 +"]")の部分を (2)alert("[ + ch1 +]") とした場合は[+ ch1 +]が返ってきます。 また、 (2)alert(["+ ch1 +"]) とした場合には+ ch1 +が返ってきます。 javascriptの中でダブルクォーテーションで 囲われた部分は文字列になると認識しているのですが、 なぜ、 (1)alert("[" + ch1 +"]")の場合は アラートで[j]と返ってくるのでしょうか? ダブルクォーテーションを二回使用しているので そもそもエラーになりそうな気がするのですが・・。 もしよろしければ、ご指導お願い致します。

  • setTimeoutを使った再帰

    初めて質問させて頂きます。 setTimeoutで呼び出してるか否かと、言う違いしか無いと、言う事を思いますが、次に挙げる2つのプログラムの動作が異なる理由をどなたかお教え頂けませんか? <script type="text/javascript"> <!-- var x; function FUNCTION1(){ x = 0; FUNCTION2(x); } function FUNCTION2(x){ if ( x < 10 ) { x++; window.alert(x); FUNCTION2(x); } } //--> </script> <body onload="javascript: FUNCTION1();"> ─────────────────────────── <script type="text/javascript"> <!-- var x; function FUNCTION1(){ x = 0; FUNCTION2(x); } function FUNCTION2(x){ if ( x < 10 ) { x++; window.alert(x); setTimeout("javascript: FUNCTION2(x);", 1000); } } //--> </script> <body onload="javascript: FUNCTION1();">

  • setTimeout()がうまくいきません

    以前、時計を一秒一秒、新しい絵を読み込んで バー表示型の時計を作ろうとしていた者ですが なんとか、1つの画像を連続表示させて 一本のバーにしていくスクリプトを 下記のように作りました そうしたところ、手動で更新をすると、うまく動作するのですが 自動で更新していこうと思いsetTimeout()を入れたのですが うまく動作してくれません。どのようにしたらよいのでしょうか <html> <head> <script language="JavaScript1.1"> <!-- function timesec() { var now = new Date() var s = now.getSeconds() var x = 60-s for(gj=0;gj<x;gj++) { var no = gj+1*x document.write("<img src='sec_1.gif' NAME='Name"+no+"'>") } } //--> </script> </head> <body> <script language="JavaScript1.1"> <!-- timesec() ----> </script> </body> </html>

  • このタグはグラデーションですが、文字が小さくて困っています。

    <html> <head> <title>文字にグラデーションをかけ1文字ずつ出力する</title> <script Language="JavaScript"><!-- str = "■■■■■■■■■■■■■■■■■■■■■■■■■■"; count = 0; function setText1() { if (count > str.length) return; count++; txt = str.substring(0,count); txt2 = gradTextConv(txt); if (document.all) document.all["outText"].innerHTML = txt2; if (document.layers) { document.layers["outText"].document.open(); document.layers["outText"].document.write(txt2); document.layers["outText"].document.close(); } setTimeout("setText1()",100); } function gradTextConv(sText) { p = 16 / str.length; str2 = ""; for (i=0; i<sText.length; i++) { pt = Math.floor(p*i); n = "0123456789ABCDEF".charAt(pt); c = "#"+n+n+"0000"; str2 = str2 + "<font color='"+c+"'>" + sText.charAt(i) + "</font>"; } return str2; } // --></script> </head> <body bgcolor="white" onload="setText1()"> <div id="outText" style="position:absolute;top:50px;left:5px;"></div> </body> </html>

    • ベストアンサー
    • HTML

専門家に質問してみよう