JavaScriptの電卓でのグローバル変数と配列変数の意味とは?

このQ&Aのポイント
  • 大学のプログラミング基礎の講義で配られたJavaScriptの電卓のテキストを理解できません。
  • グローバル変数sumとnumはどのような意味を持っているのか分かりません。
  • 配列変数listとループの意味、calc1からcalc4の式の意味も理解できません。
回答を見る
  • ベストアンサー

電卓のJavaScriptで

大学でプログラミング基礎の講義を取っているのですが、そこで配られたテキストをなぜそうなるのか理解できなかったのでご教授お願いします。 電卓のJavaScriptなのですが、 <script language = "JavaScript"> count = 0; sum = 0; num = 0; flag = 0; list = new Array( "0", "0", "0", "0", "0" ); これはグローバル変数ですべてのfunctionに適応させるためのものだと 思うのですが、sum = 0;num = 0;というのはこのJavaScriptでどのような 意味を持ったものなのでしょうか? function clist( ) { for( i = 0 ; i < 5 ; i++ ) { list[ i ] = 0; } } このlist[ i ] = 0;というのは配列変数を使っているのですが、何を意味しているのでしょうか? また、このループを使うことによってどのような意味があるのでしょうか? function aclear( ) { count = 0; sum = 0; num = 0; flag = 0; clist( ); display.value = 0; } function calc1( ) { num = sum; clist( ); display.value = num; flag = 1; } function calc2( ) { num = sum; clist( ); display.value = num; flag = 2; } function calc3( ) { num = sum; clist( ); display.value = num; flag = 3; } function calc4( ) { num = sum; clist( ); display.value = num; flag = 4; } これらのcalc1からcalc4のなかの式の意味がよくわかりません(>_<) function equal( ) { if(flag == 1) { sum = num + sum; } else if(flag == 2) { sum = num - sum; } else if(flag == 3) { sum = num * sum; } else if(flag == 4) { sum = num / sum; } else { aclear( ); } display.value = sum; } function push1( ) { list[count] = 1; sum = list[count]; ↑ この部分は何を意味しているのでしょうか? for( i = 0 ; i < count ; i++ ) { temp = 1; for( j = i ; j < count ; j++) { temp = temp * 10; } sum += list[i] * temp; } count += 1; display.value = sum; } list[count] = 1; 以下同様に function push9 まで続く。 ちょっと長すぎるので、全部書きたかったのですが、無理でした。 正直さっぱりなので、困っています。

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

  • ベストアンサー
noname#47975
noname#47975
回答No.5

ソースを見ただけでは少々把握し辛いですが、個人的な推測のみで回答します。 [1] count = 0; sum = 0; num = 0; flag = 0; list = new Array( "0", "0", "0", "0", "0" ); count:入力された桁数を格納する変数 sum : 入力された数字の合計値/演算結果を格納するための変数 num : 1度入力された数字を保持するための変数 flag : 入力された演算子の情報を格納する変数(演算子識別フラグ) list :入力された各桁の数字を格納する配列変数 この部分では、各変数の初期化を行っているものと思われます。 [2] function clist( ) { for( i = 0 ; i < 5 ; i++ ) { list[ i ] = 0; } } この部分では各桁に保持されていた数値をクリアする処理を行っていると推測されます。 [3] function calc1( ) { num = sum; clist( ); display.value = num; flag = 1; } function calc2( ) { num = sum; clist( ); display.value = num; flag = 2; } function calc3( ) { num = sum; clist( ); display.value = num; flag = 3; } function calc4( ) { num = sum; clist( ); display.value = num; flag = 4; } この部分では、演算子のボタンを押したときの処理内容を記述しているように思えます。 calc1は[+]ボタンを押したとき、 calc2は[-]ボタンを押したとき、 calc3は[×]ボタンを押したとき、 calc4は[÷]ボタンを押したとき に実行される関数に相当するものと思われます。 [4] function equal( ) { if(flag == 1) { sum = num + sum; } else if(flag == 2) { sum = num - sum; } else if(flag == 3) { sum = num * sum; } else if(flag == 4) { sum = num / sum; } else { aclear( ); } display.value = sum; } この部分ではいずれかの演算子のボタンを押した後に、[=]のボタンを 押したときの処理を記述しているものであると思われます。 if-elseの部分では、どの演算子を前もって押したかによってケース分けをして処理を記述しているものと思われます。ちなみに、押した演算子の判別はflagの値によって行われているようです。 [5] function push1( ) { list[count] = 1; sum = list[count]; ↑ この部分は何を意味しているのでしょうか? for( i = 0 ; i < count ; i++ ) { temp = 1; for( j = i ; j < count ; j++) { temp = temp * 10; } sum += list[i] * temp; } count += 1; display.value = sum; } list[count] = 1; 以下同様に function push9 まで続く。 [1]~[9]のうちのいずれかのボタンを押下した際の処理を記述していると思われます。ここで、仮に、[1]、[2]、[3]、[4]の順番で ボタンを押していったとすると、 [1]を押したとき、画面には1が表示され、 続けて[2]を押したときに、画面には12と表示、 さらに続けて[3]を押したとき、画面には123と表示、 最後に[4]を押したとき、画面には1234と表示されるような構成に なっていると思われます。 なお、本プロセスの処理の最後には、 list[0] = 1 list[1] = 2 list[2]= 3 list[3] = 4 count = 4 sum = 1234 となっているはずです。

その他の回答 (4)

  • gaku1
  • ベストアンサー率71% (10/14)
回答No.4

No.2です。No.2にずいぶん間違いを書きました。  これは数字ボタン「1」を押したときの処理ですが、もし、上の方に書いたように、これがバグフィックスの例題だとすれば、あなたはたいへん良い目をしています。右辺と左辺が逆でないと正しく動作しません。 というのは真っ赤な間違いで、「窓に表示されている」数字の1の位をsumに格納しています」が正しいです。バグフィックス云々はまちがいです。  失礼しました。

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.3

こんにちは 講義の内容でしたか・・・そういってくだされば前回のも幾らか答えようがあったのですのに(><) てっきり自作のものだと思っていました 最初のは初期値の設定みたいなものですね 最初から総数とか入ってたら電卓になりませんから・・・ function clist( ) はlist = new Array( "a", "b", "c", "d", "e" );のa,b,c,d,eを0にするということ 別の言い方すると  list[0]=0; list[1]=0; list[2]=0; list[3]=0; list[4]=0; ということ function aclear( ) は電卓ボタンの「C」の機能(全部を0にする) function calc1( )はnumという変数にsumを入れ込んで function clist()を実行 <input type = "text" name = "display">のvalue値にnumを入れ、 flagに1をいれる function equal( )はflagが1なら足算、2なら引算、3なら掛算、4なら割算、それ以外ならクリアボタン(function aclear()実行) function push1( ) は1回目に1を押すとlist[0]に1をいれてcount+1、displayにsum(1)を表示 2回目に1を押すとlist[1]に1をいれてそれをsumに投入、countの数だけ(1回)tempを10倍、それをlist[0]に掛けてsumを足していく。 そしてcount+1、displayにsum(11)を表示 3回目に押すとlist[2]に1をいれてsumに投入、tempを10倍を2回してlist[0]に掛けてsumに足す。tempを10倍してlist[1]に掛けてsumに足す 。そしてcount+1、displayにsum(111)を表示 書いていないけどおそらくpush2()はlist[count]=2; temp=2;push3()はlist[count]=3; temp=3;ではないですか? という流れになると思うのですが・・・ 多分5桁計算の電卓になるのだと思うのですが(list[4]までしかないけど万の位以降はどう削除したり計算するんだろう?) function clist()はcount数まで削除した方がいいのでは?

rinnshan
質問者

お礼

>書いていないけどおそらくpush2()はlist[count]=2; temp=2;push3()はlist[count]=3; temp=3;ではないですか? これはすべてtemp=1になっていますね。 それでも正常に動作するので、list[count]の値が変わるので、 これでいいのではないでしょうかね。

  • gaku1
  • ベストアンサー率71% (10/14)
回答No.2

 No.1の方が仰る通り、最初に変数の初期化という作業をしています。電卓のスイッチを入れた状態を作るわけです。なにも入力されていない状態です。  書かれている順番を少し変えて説明します。 sum = 0; num = 0;  この2つは計算対象になる数値を保持します。電卓の窓は、計算結果を表示しているときと、これまでの結果は表示されずにかわりに入力中の数値が表示されているときがあります。numはこれまでの計算結果です。sumは入力した数値です。操作の状態によって、2つのいずれかが窓に表示されます(display.value = sum; や display.value = num;など)。 list = new Array( "0", "0", "0", "0", "0" );  これは、数値を入力中に表示窓に表示される数値を保持するための配列変数です。ボタンを押すたびに左から順番に0~9という数値が入ります(一番左だけは1~9が入るはずですが、下にfunction push0()への言及がないので、本当にそうなっているかどうかは不明です)。入力中に数字ボタンが押されているときにこの変数値が変化します。また、クリアボタンが押されるとfunction clist()によって5桁全部が0になります。数字ボタンが押されるたびにpush1()などによってここの変数値が10進法における数値に変換されて変数sumに格納されます。 count = 0;  上のlistと関連しています。ボタンを押したことによって、表示窓に表示された数字の桁数を保持する変数です。  「15+3=」という計算をするとき、まず「1」を押したときに呼ばれるfunction push1()の処理によってこの変数の値は1になります(count += 1;の部分。countに1を加えるという意味です)。次に「2」を押すとfunction push5()の処理によりこの変数の値は2になります(count += 1;の部分)。この時点で、listの内容は[1,5,0,0,0]になっています。  count=0のとき、list[count]は配列の0番目である一番左の値(上の例では1)を指します。1桁入力するとcountの値は1となって、「つぎに数値を格納すべきlist[1]」を表すとともに「現在の桁数」を同時にあらわしています。 flag = 0;  これは、この後おこなう四則演算の種類を保持します。値が1ならたし算、2なら引き算、3ならかけ算、4なら割り算です。「+」ボタンを押した得にfunction calc1()がコールされて値が1にセットされます。残りも三つも同様です。  「15+3=」の計算では、実際にたし算が行われるのは「=」を押したときなので、それまで「=が押されたらたし算をする」ということを覚えておくための変数です。 function clist( ) { for( i = 0 ; i < 5 ; i++ ) { list[ i ] = 0; } } このlist[ i ] = 0;というのは配列変数を使っているのですが、何を意味しているのでしょうか? また、このループを使うことによってどのような意味があるのでしょうか?  これは「クリア」ボタンの処理です。listの値(入力中の値)を消しています。ただし、これまでの計算結果は消しません。ループを使うのは「list[0]=0;list[1]=0;list[2]=0;list[3]=0;list[4]=0;」と書くかわりです。適切にループを使うことにより、プログラムの可読性が高まるだけでなく、メインテナンスもしやすくなります。そういう効果を狙った処理です。  ただし、このプログラムは正しく動作しないのではないかと思います。listとcountは整合性が保たれている必要があるのに、この関数内に「count = 0;」という記述がありません。ひょっとしたら、これは「電卓」スクリプトの答えなのではなく、バグフィックスのための例題なのではないですか? function aclear( ) { count = 0; sum = 0; num = 0; flag = 0; clist( ); display.value = 0; }  同様に「オールクリア」。スイッチを入れたときの状態にします。先頭にある初期化と同じです。 function calc1( ) { num = sum; clist( ); display.value = num; flag = 1; } function calc2( ) { num = sum; clist( ); display.value = num; flag = 2; } function calc3( ) { num = sum; clist( ); display.value = num; flag = 3; } function calc4( ) { num = sum; clist( ); display.value = num; flag = 4; } これらのcalc1からcalc4のなかの式の意味がよくわかりません(>_<)  上にすでに書いてしまいましたが、演算ボタン「+」などが押されたときの処理です。電卓の窓の表示を更新するとともに、「最後に=が押されたときするのはたし算だよ」などという情報をflagにセットします。 function equal( ) { if(flag == 1) { sum = num + sum; } else if(flag == 2) { sum = num - sum; } else if(flag == 3) { sum = num * sum; } else if(flag == 4) { sum = num / sum; } else { aclear( ); } display.value = sum; }  「=」を押したときの処理です。calc1()などがセットしたflagの値によって四則演算のどれかを行い、計算結果を窓に表示しています。 function push1( ) { list[count] = 1; sum = list[count]; ↑ この部分は何を意味しているのでしょうか?  これは数字ボタン「1」を押したときの処理ですが、もし、上の方に書いたように、これがバグフィックスの例題だとすれば、あなたはたいへん良い目をしています。右辺と左辺が逆でないと正しく動作しません。 for( i = 0 ; i < count ; i++ ) { temp = 1; for( j = i ; j < count ; j++) { temp = temp * 10; } sum += list[i] * temp; } count += 1; display.value = sum; } list[count] = 1; 以下同様に function push9 まで続く。  「push0()」という、やや複雑な関数も定義されているはずですが、その「やや複雑」な部分とは、数値入力するときに最初に押された「0」は無視する(1~9が押されたときだけ処理する)という内容であるはずです。  以上です。参考になったでしょうか。

rinnshan
質問者

お礼

ありがとうございました。 すべて完璧にわかったはまだ疑問なのですが、numとsumのこのプログラムないのでの位置づけや配列変数について内容を保持するために=0としているとわかりました。 本当に貴重なお時間奪ってしまってすみませんでした。

noname#39970
noname#39970
回答No.1

導入の部分の解析ができているようなので 個々のfunctionやループを単位に同じように解析を行ってみたら良い。 意味のわからない処理の単位も 上位の括弧(主に{})での単位で見ると処理している物が見えてくる筈。 例 count = 0;//countを0に sum = 0;//sumを0に num = 0;//numを0に flag = 0;//flagを0に list = new Array( "0", "0", "0", "0", "0" );//listを5個の配列でそれぞれ0に これらをグループとして見たときに 「これは初期化」 という機能である事が判る。

rinnshan
質問者

お礼

ご回答ありがとうございます。 確かにそのとおりですね。 しかし、自分で解析をしようと思っているのですが、特に[]が使ってある 配列変数の処理が全くわからないのです。

関連するQ&A

  • 電卓のJavaScript

    初心者で申し訳ないのですが、電卓のソースを作ってみたのですが、JavaScriptが間違っているためか「ページにエラーが発生しました」となり計算が行われません。 どのように、改変すればいいのでしょうか?どうかご教授お願いします。 <html> <head> <title> 電卓 </title> <script language = "JavaScript"> count = 0; sum= 0; flag =0; list = new Array( "0", "0","0","0","0",); function clist( ) { for( i = 0 ; i < 5 ; i++ ) { list[i] =0; } } function calc1() { num = sum; clist( ); display.value = num; flag = 1; } function calc2() { num = sum; clist( ); display.value = num; flag = 2; } function calc3() { num = sum; clist( ); display.value = num; flag = 3; } function calc4() { num = sum; clist( ); display.value = num; flag = 4; } function calc5() { clist( ); } function equal() { if(flag==1) { sum=num+sum; display.value=sum; clist( ); } else if(flag==2) { sum=num-sum; display.value=sum; clist( ); } else if(flag==3) { sum=num*sum; display.value=sum; clist( ); } else if(flag==4) { sum=num/sum; display.value=sum; clist( ); } } function push0( ) { list[count] = 0; sum = list[count]; for( i = 0 ; i < count ; i++ ) { temp=1; for( j = i ; j < count ; j++ ) { temp=temp*10; } sum+ =list[i]*temp; } count+=1; display.value=sum; } function push1( ) { list[count] = 1; sum = list[count]; for( i = 0 ; i < count ; i++ ) { temp=1; for( j = i ; j < count ; j++ ) { temp=temp*10; } sum+ =list[i]*temp; } count+=1; display.value=sum; } 同様に2~9 </script> </head> <body> <hr><br> <input type = "button" value ="7" onclick = "push7()">&nbsp <input type = "button" value ="8" onclick = "push8()">&nbsp <input type = "button" value ="9" onclick = "push9()">&nbsp&nbsp <input type = "button" value ="+" onclick = "calc1()">&nbsp<br><br> <input type = "button" value ="4" onclick = "push4()">&nbsp <input type = "button" value ="5" onclick = "push5()">&nbsp <input type = "button" value ="6" onclick = "push6()">&nbsp&nbsp <input type = "button" value ="-" onclick = "calc2()">&nbsp<br><br> <input type = "button" value ="1" onclick = "push1()">&nbsp <input type = "button" value ="2" onclick = "push2()">&nbsp <input type = "button" value ="3" onclick = "push3()">&nbsp&nbsp <input type = "button" value ="×" onclick = "calc3()">&nbsp<br><br> <input type = "button" value ="0" onclick = "push0()">&nbsp <input type = "button" value ="=" onclick = "equal()">&nbsp <input type = "button" value ="C" onclick = "calc5()">&nbsp&nbsp <input type = "button" value ="÷" onclick = "calc4()">&nbsp<br><br> <br><br><hr><br>&nbsp&nbsp&nbsp <input type = "text" size ="10" name = "display">&nbsp <br><br><hr><br> </body> </html>

  • Javascriptを短くしたい

    初歩的なことですみません。 Javascriptで表示/非表示を切り替えるものを作ろうと思うのですが、 以下のサンプル文のような形では、項目数が増えるとその分だけ どんどんJavascriptも長くなっていってしまいます。 Javascript文を簡潔にするには、どのように記述すればよいのでしょうか。 よろしくお願いします。 <script type="text/javascript"> <!-- function Hyo1(num) { if (num == 0) { document.getElementById("cont1").style.display="block"; } else { document.getElementById("cont1").style.display="none"; } } function Hyo2(num) { if (num == 0) { document.getElementById("cont2").style.display="block"; } else { document.getElementById("cont2").style.display="none"; } } // --> </script> <div id="cont1">ああああああ</div> <form> <input type="button" value="表示" onclick="Hyo1(0)"> <input type="button" value="非表示" onclick="Hyo1(1)"> </form> <form> <div id="cont2">いいいいいい</div> <input type="button" value="表示" onclick="Hyo2(0)"> <input type="button" value="非表示" onclick="Hyo2(1)"> </form>

  • javascriptで電卓を作成

    プログラミングをまったくやったことがない状態から、ドットインストールやテックアカデミーのHTML,CSS,Javascriptの入門動画をすべて見終わった段階ですので、 基本的な仕組みと関数やfor文、if文、while文、などについてくらいは理解しています。 今回、javascriptを使って電卓のシステムを組む、という課題があり、 ネットで検索してやってみてはいるのですが行き詰っています。 最初は以下のような形で作成をしていました。 <body> <form name="myform">  <table border="1"> <tr> <td colspan="4"> <input type="text" name="result" value="" id="result"> </td> </tr> <tr> <td><input type="button" value=" "onclick="calc(' ')" ></td> <td><input type="button" value="%"onclick="calc('%')"></td> <td colspan="2"> <input type="button" value="AC" onclick="calc('AC')"></td> </tr> <tr> <td><input type="button" value="7" onclick="calc('7')"></td> <td><input type="button" value="8" onclick="calc('8')"></td> <td><input type="button" value="9" onclick="calc('9')"></td> <td><input type="button" value="÷" onclick="calc('÷')"></td> </tr> <tr> <td><input type="button" value="4"onclick="calc('4')" ></td> <td><input type="button" value="5"onclick="calc('5')" ></td> <td><input type="button" value="6"onclick="calc('6')"></td> <td><input type="button" value="×" onclick="calc('×')"></td> </tr>   <tr> <td><input type="button" value="1" onclick="calc('1')" ></td> <td><input type="button" value="2" onclick="calc('2')"></td> <td><input type="button" value="3" onclick="calc('3')"></td> <td><input type="button" value="-" onclick="calc('-')"></td> </tr> <tr> <td><input type="button" value="0" onclick="calc('0')" ></td> <td><input type="button" value="+" onclick="calc('+')"></td> <td colspan="2"> <input type="button" value="=" onclick="calc('=')"></td> </tr> </form> <script> function calc(a) { if (a === "=") { document.myform.kekka.value = eval(document.myform.kekka.value); } else if (a === "AC") { document.myform.kekka.value = ""; } else { document.myform.kekka.value += a; } </script> </body> </html> ですが、onclickとevalを使わず、代わりに「addEventListner」を用いるよう指示されました。 「addEventListner」に関しては、検索してなんとかざっと理解したのですが、それ以前に、電卓の基本的な関数の組み方を理解していないため、いまいちどこから手をつけたらいいかわかりません。 いろんなサイトを見ているといろんなやり方がでてきますが、ope=+,やflag=0などの表記をよく見かけます。が、この意味もいまいちわかっていません。。 初心者すぎるので、何かアドバイスをいただけますと幸いです。 宜しくお願いいたします。 また、このような初心者が使いこなせるようになるために向いている動画や書籍、ページがありましたら教えていただけますと助かります。

  • 二次配列のqsort

    二次配列のqsortについて分かる方に教えて頂きたいのですが 一段落のプログラムを載らせていただきました.count3[j][i]をバブルソートで降順でやってみましたが高速が要求されるため,qsortを使ってやり直したいのですが (ちなみにcount1[j][i],count2[j][i]は前で定義してあります.count4[j][i]にはiの順番を記憶するための二次配列です)  ぜひともよろしくおねがいします. int ind_near_search(int j,int t) { int i,var_num,count3[IND][VAR],count4[IND][VAR],temp1,temp2,num=0,m=0; for(i=0;i<VAR;i++){ if(individual[j].x[i]==1){ //変数が1と0の場合分け count2[j][i]=t-count[j][i]; }else{ count2[j][i]=count[j][i]; } if(individual[j].x[i]==1){ //全てcount3に値を入れる count3[j][i]=count2[j][i]; }else{ count3[j][i]=count[j][i]; } } for(i=0;i<VAR;i++){ count4[j][i]=num++; } for(m=0;m<VAR-1;m++){ for(i=0;i<VAR;i++){ //バブルソートにより降順に並べ換え if(count3[j][i]<count3[j][i+1]){ temp1=count3[j][i]; count3[j][i]=count3[j][i+1]; count3[j][i+1]=temp1; temp2=count4[j][i]; //count4にはcount3の並べ替え後の対応する番号を入れる count4[j][i]=count4[j][i+1]; count4[j][i+1]=temp2; } } } for(i=0;i<VAR;i++){ var_num=count4[j][i]; //count4の大きい順番からその番号をvar_numに渡す if(individual[j].x[var_num]==0){//0と1の場合分け individual[j].x[var_num]=1; }else{ individual[j].x[var_num]=0; }

  • 現在学校のjavaの課題電卓を作っています

    import java.io.*; class dentaku { public static void main(String[] args)throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); System.out.print("式を入力"); String input = r.readLine(); String sum[] = new String[input.length()]; String number = ""; int s = 0; int goukei =0; char enzan = ' '; for(int i=0; i < input.length(); i++) { //System.out.print(str[i]); //文字列から1文字ずつ抽出 char num = input.charAt(i); if(i == input.length()-1) { sum[s] = number; } else { if(num == '+' || num == '-'|| num == '*'|| num == '/') { //配列sumに代入 sum[s] = number; s++; sum[s] = String.valueOf(num); s++; } else { //変数numberにnumを代入 number = number + num; } } } for(int j=0; j<sum.length; j++) { if(sum[j] == null) { break; } if(j == 0) { goukei = Integer.parseInt(sum[j]); } else { if(sum[j].equals("+") || sum[j].equals("-")|| sum[j].equals("*")|| sum[j].equals("/")) { enzan = sum[j].charAt(0); } else { switch(enzan) { case '+': goukei += Integer.parseInt(sum[j]); break; case '-': goukei -= Integer.parseInt(sum[j]); break; case '*': goukei *= Integer.parseInt(sum[j]); break; case '/': goukei /= Integer.parseInt(sum[j]); break; } } } } System.out.print(goukei); } } までできたのですが 実行し 実際に 1+1+1とうってみると答えが23になってしまいます。 どのようにしたらいいのでしょうか

    • ベストアンサー
    • Java
  • javascriptでの画像の先読みについて(その2)

    その1からの続きです。。 以下が私の作ったソースです。 <script language="JavaScript"> <!-- var flag=new Array(); var image=new Array(); var img=new Array(); // gif画像の先読み img[0]=new Image();img[0].src="透明gif"; img[1]=new Image();img[1].src="上向き矢印.gif"; img[2]=new Image();img[2].src="矢印の線.gif"; img[3]=new Image();img[3].src="下向き矢印.gif"; var on_mouse=144; for (i=0;i<144;i++) {flag[i] = 0;} function on_image(num){ on_image_no = num; //マウスの位置(0~143) } function off_image(num){ on_image_no = 144; //範囲外 } function mouse_click(){ flag[on_image_no]=(flag[on_image_no]==0); var image_no=0; for(i=0;i<144;i++){ if(flag[i]){ //フラグが立っていたら矢印の始点or終点を表示 if(image_no==0){ document.image[i].src=img[1].src; //上向き矢印 image_no=2; //次から矢印の線を表示 }else{ document.image[i].src=img[3].src; //下向き矢印 image_no=0; //次から透明なgifを表示 } }else{document.image[i].src=img[image_no].src;} } } //--> </script> #関係ないですけど、off_image()はいらないかも…。 以上、質問が長くなってしまって大変恐縮ですが、どなたか私をお助けください。 よろしくお願いいたします。 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=319633

  • Javascriptの動的リスト作成について

    Javascriptの動的リスト作成について お世話になっています。 Javascriptで選択リストを動的に変えたいと思っています。 また、Javascriptで作成したリストは、multipleとして複数選択できるようにしたいと考えています。 そこで、下記のようにスクリプトを書きました。リスト2(smallwheretag)が1つのみ選択を許すときは、うまくいったのですが、multipleにするためにnameを配列にしたところ、うまくリストが作成できなくなってしまいました。 なにかスクリプトに変更が必要なのでしょうか?ご教授お願いいたします。 <HTML部> <select name="bigwheretag[]" onchange="javascript:listChange(this.value);"> <option value="">検索項目</option> <option value="11%">自然</option> <option value="12%">街</option> <option value="13%">家庭</option> </select> <select name="smallwheretag[]" multiple> <option value="">大項目を選択して下さい</option> </select> <Javascript部> var where1_text = new Array("川", "海", "山", "滝", "その他"); var where1_value = new Array("1101", "1102", "1103", "1104", "1199"); flag1 = document.form.bigwheretag.value; if (flag1=="11%") { document.form.smallwheretag.length = where1_text.length; for(var i=0; i<where1_text.length; i++) { document.form.smallwheretag.options[i].text = where1_text[i]; document.form.smallwheretag.options[i].value = where1_value[i]; } }・・・・・・・・以下同様

  • 戻り値必要なし

    JavaScript初心者です。 戻り値なしの関数について。return とreturn falseでは何か違うのでしょうか? function test(){ if(flag) return; var num=1+2; } function test2(){ if(flag) return false; var num=1+2; } よろしくお願いします。

  • JavaScript 初心者です。

    急遽ホームページ作成をやることになり大変困っています。 何もかも初心者で全くわからない状態ですのでよろしくお願い致します。 お客様情報入力で送信ボタンで押すとメールで情報が届く様にしています。 送信ボタンを押したときに、入力チェックをかけているのですが、複数のテキストボックス(郵便番号を入力するテキストボックス)のチェック方法が分かりません。 郵便番号は、3桁-4桁で入力して頂く様にしています。 HTML(郵便番号のみです)・・・ <INPUT maxlength="3" size="3" type="text" name="iyubin" value="" style="ime-mode:disabled;" id="01">-<INPUT type="hidden" name="iyubin" value="-"><INPUT maxlength="4" size="4" type="text" name="zyubin" value="" style="ime-mode:disabled;" id="02"> JavaScriptでの入力チェック(省略をしていますが、正常に動作しているヵ所です)・・・ //お客様情報 function check(){ var flag = 0; // お名前 if ((flag==0) && (document.form.gName1.value == "")){ flag = 1; } if(flag){ window.alert('【お名前】を入力して下さい。'); // 入力されていない場合は警告ダイアログを表示 return false; // 送信を中止 } // ふりがな if ((flag==0) && (document.form.hName2.value == "")){ flag = 1; } if(flag){ window.alert('【ふりかな】を入力して下さい。'); // 入力されていない場合は警告ダイアログを表示 return false; // 送信を中止 } // 性別 if((flag==0) && (document.form.iSeibetsu.length)) { // 選択肢が複数ある場合 flag = 1; var i; for(i = 0; i < document.form.iSeibetsu.length; i ++){ if(document.form.iSeibetsu[i].checked){ flag = 0; break; } } } else{ // 選択肢が1つだけの場合 if((flag==0) && (!document.form.iSeibetsu.checked)){ flag = 1; } } if(flag){ window.alert('【性別】を選択して下さい。'); // 選択されていない場合は警告ダイアログを表示 return false; // 送信を中止 } //このヵ所に郵便番号の入力チェックを入れたいです。 すみませんが、よろしくお願い致します。

  • JavaScriptの計算のNaNの判定について…

    いろいろなアドバイスを参考に以下のようなプログラムを作り、値が正の時はちゃんと計算されるのですが負の時はNaNと判定されてしまいます。どうしたら負の場合でもちゃんと計算されますか?いろいろ調べたのですが見つかりませんでした…。よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=-100; } else { if (a==1 && b==2) { rslt1=-90; } else { if (a==2 && b==1) { rslt1=-80; } else { rslt1=-70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=-95; } else { if (a==1 && c==2) { rslt2=-85; } else { if (a==2 && c==1) { rslt2=-75; } else { rslt2=-65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=-60; } else { if (a==1 && d==2) { rslt3=-50; } else { if (a==2 && d==1) { rslt3=-40; } else { rslt3=-30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } function sum3() { document.getElementById('txt6').value=((document.getElementById('txt4').value + rslt2 + document.getElementById('txt5').value * 2) / 4); } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> <input type="text" id="txt6" value=""><p> </body> </html>

専門家に質問してみよう