なぜbgColorは#dededeになってしまったのでしょうか?

このQ&Aのポイント
  • 背景色が黒→白に変わるというスクリプトで、背景色が一定の値で固定されてしまう現象について質問しています。
  • スクリプト中にあるif文の条件式を削除した場合に、背景色が中途半端な#dededeという色で固定されてしまう問題が発生しました。
  • この現象の原因や解決策について、質問者が理解できないため、教授を求めています。
回答を見る
  • ベストアンサー

なぜbgColorは#dededeになってしまったのでしょうか?

背景色が黒→白に変わるというスクリプトを書いてみて、 実際の使用上はさほど問題ではないのですが、 引っかかる部分があるので質問させていただきました。 <html> <head> <script type="text/javascript"> <!-- i=0; function FUNC(){ color=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]; document.bgColor="#"+color[i]+color[i]+color[i]+color[i]+color[i]+color[i]; i++; status=document.bgColor+" "+color[i]; if(i>=color.length){return;} setTimeout("FUNC()",50); } //--> </script> </head> <body onload="FUNC()"> </body> </html> このスクリプトで、定義した配列数を超えると処理を中止させる if(i>=color.length){return;} を削除して実行すると、 color[15]を超えた時点、つまり背景色が終点の#ffffffから さらに変わろうとした段階で未定義値のエラーが出るかと思いきや、 背景色が、中途半端な#dededeという色で固定されてしまいました。 配列でいうと "#"+color[13]+color[14]+color[13]+color[14]+color[13]+color[14] ですね。 なぜこのようになったのかさっぱり理解不能です。 どなたかご教授をお願いいたします<(_ _)>

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

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

提示されているソースを少し変えてみました。 <html> <head> <script type="text/javascript"> <!-- i=0; function FUNC(){ color=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]; document.bgColor="#"+color[i]+color[i]+color[i]+color[i]+color[i]+color[i]; status=document.bgColor+" "+color[i]+" "+color[i]+color[i]+color[i]+color[i]+color[i]+color[i]; i++; //インクリメントはこの位置で if(i>=color.length+1){return;} //配列を一つ超えた所まで setTimeout("FUNC()",50); } //--> </script> </head> <body onload="FUNC()"> </body> </html> これでわかるのは、予期しない値(undefinedの羅列)に#がつくと、#dededeになるということです。 試しに、他の予期しない場合(以下)で実行してみると、 <html> <head> <script type="text/javascript"> <!-- function FUNC(){ document.bgColor="#"+parseInt(""); //数字以外の文字列を数値にしようとしている status=document.bgColor+":"+parseInt(""); } //--> </script> </head> <body onload="FUNC()"> </body> </html> #000a00になります。 結局、定義していない配列の要素から値をとろうとすると、スクリプトエラーは出ず、undefinedという実際は何かわからないデータが返され、その何かわからないものによって色がつけられているというところでしょうか。 document.bgColorはどんな値をいれてもスクリプトエラーにはならなくて、なんらかの値を勝手にセットするみたいですね。

spnk55
質問者

お礼

bgColorはどんな値を入れてもスクリプトエラーにならないということで、 いろいろ値を代入して試してみた結果、 なぜ#dededeになったのかという仕組みが7割方理解できました。 残り3割は理解できそうにないので深追いは避けておきます! どうもありがとうございました<(_ _)>

関連するQ&A

  • このスクリプトのどこが間違っているか教えてください

    ブラウザウィンドウの背景を10秒ごとに、 1.jpg→2.jpg→3.jpg・・・ というふうに変化させたいとします。 以下のスクリプトを考えたんですが、 「オブジェクトを指定してください。」 とエラーが出ます。 ただ単に背景を表示させるだけならうまくいくのですが、 setTimeoutメソッドを追加して背景を変化させようとすると エラーが出ます。 一体どのようにすればうまくいくのでしょうか? よろしくお願いします<(_ _)> ********************************************* <html> <head> <script> <!-- function FUNC(){ jikan=new Date(); ss=jikan.getSeconds(); if(ss>=0 || ss<10){ document.write("<body background='1.jpg'>"); } if(ss>=10 || ss<20){ document.write("<body background='2.jpg'>"); } if(ss>=20 || ss<30){ document.write("<body background='3.jpg'>"); } if(ss>=30 || ss<40){ document.write("<body background='4.jpg'>"); } if(ss>=40 || ss<50){ document.write("<body background='5.jpg'>"); } if(ss>=50 || ss<60){ document.write("<body background='6.jpg'>"); } setTimeout("FUNC()",1000); } //--> </script> </head> <body onLoad="FUNC()"> </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
  • このタグが繰り返しにならないでしょうか?(今は、一度で終わります。)

    このタグが繰り返しにならないでしょうか?(今は、グラデーションが一度で終わります。) <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 size='20' 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>

  • 外部シートの背景色を得る

    xx.cssに .bodybg{background-color: #eeeeee} と書いてあります。 こうしてbodyの背景色が決められています。 このbodyの中から#eeeeeeを得ようとして <head> <title></title> <link rel="stylesheet" type="text/css" href="xx.css"> </head> <body class="bodybg"> <script language="JavaScript"> function func(){ alert(document.body.bgColor) } </script> と書きました。得たいのは#eeeeeeですが、単に#eeeeeeといて得るのではなく、bodyの背景色を得る方法を教えてください。

  • 指定した背景画像をサイトを訪れるたびに切り替える

    Javascript初心者で、全く見当がつきません。 お力をお貸しください。 参考サイトのように、 Bodyではなく、DivのID一部分のみ、 背景画像がサイトを訪れるたびに切り替わるようにしたいのですが, どのサンプルも「Body」の背景が変わってしまいます。 どなたか、お答えして頂けないでしょうか? <参考サイト> http://www.upenn.edu/ <現在記述中のソース> <html> <head> <style type="text/css"> #content { color: #ffe700; font-size: 30px; height: 600px; } </style> <title>見る度に背景色が変わります</title> <script language="JavaScript"> <!-- function color(){ bgcolor = "#"; for(i = 0 ; i < 6 ; i++) { //0から15の乱数を発生させる color = Math.floor(16 * Math.random()); //16進数に変換 color = color.toString(16); //つなぎ合わせる bgcolor = bgcolor + color; } //文字列を背景色に document.bgColor = bgcolor; } //--> </script> </head> <body onLoad="color()"> 見る度に背景色が変わります<br> <div id="content"> ここの背景にランダムに画像が変更して欲しい。Bodyではなく、Divの指定したID内にのみ表示して欲しいのです</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さんに教えていただいたスクリプトを永遠に 続けるような感じです。)

  • 文字を一文字ずつ表示

    JavaScriptで文字を一文字ずつ表示するサンプルを見つけ、使おうとしたところdocument.allが使われていた為、ネスケで対応できない事が分かりました。ネスケ4.7で対応するようにするにはどのように変えたらいいのか教えて頂きたく宜しくお願いいたします。 <SCRIPT Language="JavaScript"> <!-- var msg="Welcome!!"; i=0; function Start(){ if(i<=msg.length){ if(document.all){ myText.innerHTML = msg.substring(0,i); }else if(document.layers){ document.myText.document.open(); document.myText.document.write(msg.substring(0,i)); document.myText.document.close(); } i=++i; setTimeout("Start()",200); }else{ i=0; setTimeout("Start()",1000); } } // --> </SCRIPT> </HEAD> <BODY onLoad="Start()"> <DIV id="myText"></DIV> </BODY> 宜しくお願い致します。

  • 文字色の変化

    <HTML> <HEAD> <TITLE>bgcolor</TITLE> <SCRIPT LANGUAGE="JavaScript"> function dispbk(t){ for (i=0; i<=255; i++){ for (j=0;j<t;j++){ c=i+i*256+i*256*256; c="000000"+c.toString(16); c=c.substring(c.length-6,c.length); document.bgColor=c; } } } </SCRIPT> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"> dispbk(3); </SCRIPT> <HR> <H1>教えて!GooH1> <HR> </BODY> </HTML> これと同じような書き方で、 1.背景を黒から白からに徐々に変えながら文字を白から黒に徐々に変えるプログラム 2.文字の色だけが一文字ずつ白から黒に変わるプログラム の書き方を教えてください。

  • 画像をフェードインさせるタグについて

    HP作成の際、 画像をフェードインさせたいのですが、 以下のタグをコピーして貼り付けても エラーになります。 どこを修正したらよいのでしょうか? よろしくお願いします<m(__)m> <HTML> <HEAD> <TITLE></TITLE> <SCRIPT language="JavaScript"> <!-- spd = 50; ntc = 2; fii = new Array("ia","ib","ic"); cnt = 0; i = 0; function fdInImg() { document.images[fii[i]].filters['alpha'].opacity = cnt; cnt += ntc; if(cnt >= 100) { cnt = 0; i++; } if(fii.length <= i) return; setTimeout("fdInImg()",spd); } //--> </SCRIPT> </HEAD> <BODY bgcolor="#ffffff" onLoad="fdInImg()"> 画像が順番にフェードインします。<BR><BR> <IMG src="画像のアドレス"> <IMG src="画像のアドレス"> <BR><BR> </BODY> </HTML>

  • useless setTimeout cal 

    すみません。教えて下さい。 下のコードを書いて、動きはするんですが、実行後に 「useless setTimeout cal」というエラーが出てしまいます。 エラーを回避したいのですが、どうすればいいのでしょうか。 IE6/IE8/firefox3.6 などで試しました *********************************** <html> <head> <script type = 'text/javascript'> function item(){ var i = 0; write(); function write(){ document.write(i+"<br>"); i ++; if(i<10){setTimeout(write(),100);} } } </script> </head> <body> <script type = 'text/javascript'>item();</script> </body> <html> ***********************************

専門家に質問してみよう