• 締切済み

複数の配列から、項目数にあわせてプルダウンへ表示

お世話様です。 まったくの初心者です。 function todofukenSet(){ //オプションタグを連続して書き換える for ( i=1; i<74; i++ ){ //選択した都道府県によって分岐 switch (document.selbox.todofuken.selectedIndex){ case 0: document.selbox.kuchoson.options[i].text="";break; case 1: document.selbox.kuchoson.options[i].text=tokyo_todofuken[i];break; case 2: document.selbox.kuchoson.options[i].text=kanagawa_todofuken[i];break; case 3: document.selbox.kuchoson.options[i].text=chiba_todofuken[i];break; case 4: document.selbox.kuchoson.options[i].text=saitama_todofuken[i];break; case 5: document.selbox.kuchoson.options[i].text=ibaraki_todofuken[i];break; case 6: document.selbox.kuchoson.options[i].text=tochigi_todofuken[i];break; case 7: document.selbox.kuchoson.options[i].text=gunnma_todofuken[i];break; case 8: document.selbox.kuchoson.options[i].text=yamanashi_todofuken[i];break; case 9: document.selbox.kuchoson.options[i].text=nagano_todofuken[i];break; case 10: document.selbox.kuchoson.options[i].text=shizuoka_todofuken[i];break; } } 抜粋になってしまいますが、 以上の文で、フォームにある<select>の<option>項目を、複数の配列へ分岐させて表示しています。 ですが、配列の項目数が違うため、74より少ない項目に関しては、 「undefined」と表示されてしまいます。 i<74; の部分を、「配列ごとの数を読みとって、その数ごとに表示」 という指示にするには、どのように記述すれば良いでしょうか。 ご教授ください。 何卒よろしくおねがいいたします。

みんなの回答

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

動作確認していませんが、この記述でいかがですか function todofukenSet(){ var pref = document.selbox.todofuken.selectedIndex; var opts = document.selbox.kuchoson.options; var citiesList = [ [], // 後の処理を簡単にするためのダミー情報 tokyo_todofuken, kanagawa_todofuken, chiba_todofuken, /*以下略*/ ]; var cities = citiesList[pref]; for (var i=0; i<cities.length; i++) opts[i].text = cities[i]; for (var i=cities.length; i<74; i++) opts[i].text = ""; }

mamedaifuku0722
質問者

お礼

おお。 ありがとうございます!undifinedが消えました! さっそくのご回答、ありがとうございます! たすかりました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 条件を付けたセレクトメニューの値の取得

    JavaScriptで下記の流れの入力フォームを作成しています。 (1)一つ目のセレクトメニューで選択した項目に応じて、もう1つのセレクトメニューの内容を変更する (2)submitボタンを押すと、次のWeb画面で選択した内容を表示する (1)については色々なところのサンプルコードを参考にしつつ、なんとか作成できました。 しかし、(2)は値の受け渡しがうまく出来ずに頭を抱えています。 (unitの値もgroupの値も共に空欄が返ってくる) ◆(1)のコード: 例えばUnit1を選択すると、グループ1(1-1~1-4)が表示され、 Unit2を選択すると、グループ2(2-1~2-4)がセレクトメニューに表示されるというものです。 <TR><TD> <TD><B>Unit</B><BR>  <select name="unit" onchange="groupSet()"> <option value="">-選んでください-</option> <option value="">Unit1</option> <option value="">Unit2</option> <option value="">Unit3</option> </select> <TD><B>Group</B><BR>  <SELECT NAME="group"> <option value="">-選んでください-</option> <option value=""></option> <option value=""></option> <option value=""></option> <option value=""></option> </select> <script> //グループ1の配列 var group1_list=new Array( "-選んでください-","1-1","1-2","1-3","1-4"); //グループ2の配列 var group2_list=new Array( "-選んでください-","2-1","3-2","3-3","3-4"); //グループ3の配列 var group3_list=new Array( "-選んでください-","4-1","4-2","4-3","4-4"); function buSet(){ //オプションタグを連続して書き換える for ( i=1; i<5; i++ ){ //選択分岐 switch (document.selbox.unit.selectedIndex){ case 0: document.selbox.bu.options[i].text="";break; case 1: document.selbox.bu.options[i].text=group1_list[i];break; case 2: document.selbox.bu.options[i].text=group2_list[i];break; case 3: document.selbox.bu.options[i].text=group3_list[i];break; } } document.selbox.bu.selectedIndex=0;} </script> ◆(2)のやりかた request.getParameter("unit")およびrequest.getParameter("group")で値を取得し、 画面への表示&ファイルへの保存を行っていますが、選択したgroup○○○の項目ではなく、空欄を取得しているようなのです・・・ どなたか知恵を貸してください。よろしくお願いします。

  • 配列の中に複数存在する数がいくつあるか

    お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]==array[j]){ cnt++; break; } } } return cnt; forループで配列0から同じ数を順番に調べ、もしヒットすればカウントを増やして内側のループをブレイクし、配列1からまた順番に調べようとしたのですが、 上の例の場合、配列0と配列1が同じ数(0)ですので、カウントが余計に増えてしまいます。 どのように組めばうまく動作するでしょうか。宜しくお願いします。

    • ベストアンサー
    • Java
  • 複数のプルダウン

    いつも参考にしております。 プルダウンが選択後、もうひとつのプルダウンを表示したいと 思っておりますが、うまく表示されません。 1つめのプルダウンの選択によって、2つめのプルダウンのメニューは 異なります。 <!-- function setArea(n) {  prefItem = [["▼選択してください"],   ["▼選択してください", "千葉県", "東京都", "神奈川県", "山梨県"],   ["▼選択してください", "新潟県", "長野県", "富山県"],   ["▼選択してください", "静岡県", "愛知県", "岐阜県", "三重県"],   len = document.form1.PrefID.options.length;   for (i=0; i<len; i++) {    document.form1.PrefID.options[i] = null;   }   document.form1.PrefID.style.visibility = "visible";   for (i=0; i<prefItem[n].length; i++) {    document.form1.PrefID.options[i] = new Option(prefItem[n][i]);   } } //--> <select name="AreaID" onChange="setArea(this.selectedIndex)"> <option value="0" selected>▼選択してください</option> <option value="1">関東</option> <option value="2">甲信越・北陸</option> <option value="3">東海</option> </select> <select name="PrefID" style="visibility:hidden"> たとえば、1つめのプルダウンを「関東」を選択すると 2つめのプルダウンに「千葉県, 東京都, 神奈川県, 山梨県」 と表示されますが、その後「▼選択してください」を選択すると 「▼選択してください, 神奈川県」と2つのメニューが表示されてしまいます。 メニューを削除して、新しく生成しています。 なので、「▼選択してください」と1つだけのメニューになるはずだと思うのですが。 ご教授お願いいたします。

  • プルダウンメニューの連動で・・・

    function change(){ item_date = form.cat1.selectedIndex; item_value= form.cat1.options[item_date].value; var i; switch(item_value) { case "1": listArray = new Array(); listArray[0] = new Option("aaa","縺ゅ≠縺・quot;); listArray[1] = new Option("sss","www"); break; case "2": listArray = new Array(); listArray[0] = new Option("222","333"); listArray[1] = new Option("333","333"); listArray[2] = new Option("444","444"); listArray[3] = new Option("555","444"); break; } for(i=0;i < listArray.length;i++){ document.form.cat2.options[i] = listArray[i]; } } このようにしてみたのですが、 2を選択してから1を選択すると、2で選択した「444」と「555」が残ってしまいます。 一度消してしまおうとしたのですが、document.form.cat2.reset();ではエラーが出てしまいます。(オブジェクトが選択されていない) どのようにしてクリアすれば良いのでしょうか?

  • 自然数を序数に

    大学で、勉強をはじめたばかりの者です。 1~20の自然数を入力して、その数に対応する序数を表す プログラムを作成したいのですが、 自分で作ると以下のようになりました。 どこをどう直せばちゃんと実行できるようになりますか?(>_<) <pre><script type="text/javascript"> <!-- // 変数の宣言 var number; // 入力 number = prompt("1~20の自然数を入力して下さい"); //(計算?) 出力 switch(number) { case "1": document.writeln("1st"); break; case "2": document.writeln("2th"); break; case "3": document.writeln("3rd"); break; default: document.writeln("number + th"); } // --> </script></pre>

  • 配列とポインタでの書き直し(c++)その1

    2つのサイコロの合計と、回数、確率、エラーを配列を使って表示する課題に取り組んでいます。配列を使っては何とかできましたが、課題では配列とポインターの両方を使ってこれを書かなくてはいけません。ポインターに関しては本を読んでも実際応用できないので困っています。ポインターについてわかる方、ヒントください。  ちょっと長いので2つに分けて掲示します。(みにくくてごめんなさい!) #include<>....省略 int rollDice(void); double getError(double, int, double []); int main(void) { int sum[11]; double error[11]; int throws; double probability; error[0] = 1.0/36.0; error[1] = 2.0/36.0; error[2] = 3.0/36.0; error[3] = 4.0/36.0; error[4] = 5.0/36.0; error[5] = 6.0/36.0; error[6] = 5.0/36.0; error[7] = 4.0/36.0; error[8] = 3.0/36.0; error[9] = 2.0/36.0; error[10] = 1.0/36.0; srand((unsigned) time(NULL)); for (int i=0; i<11; i++) sum[i] = 0; cout << "\n何回サイコロを転がしますか?: "; cin >> throws; for (int j= 0; j<throws; j++) { int roll = rollDice(); switch(roll) { case 2: sum[0]++; break; case 3: sum[1]++; break; case 4: sum[2]++; break; case 5: sum[3]++; break; case 6: sum[4]++; break; case 7: sum[5]++; break; case 8: sum[6]++; break; case 9: sum[7]++; break; case 10: sum[8]++; break; case 11: sum[9]++; break; case 12: sum[10]++; break; } } 配列とポインタでの書き直し(c++)その2 につづく

  • javascriptのアラートの表示方法について

    javascript初心者です。 javascriptで、計算機を作っていて、数字を入れずに 「=」(計算)ボタンを押すと、 「未入力です」とアラ-トで表示させたいのですが、 やり方がわかりません。 お手数ですが、ご教示下さい! よろしくお願いします!! ※以下、私が作成したものです。 この中のどの部分に、どのような表記をいれたら良いのか、 教えてください。。 <html>   <head>    <title>計算機</title>   <script type="text/javascript">     function Calc() {    var a;    var b;    var c;    var ope;        a = parseInt(document.form1.textA.value);    b = parseInt(document.form1.textB.value);    ope = parseInt(document.form1.selOpe.value);        switch (ope) {   case 1:c = a + b;    break;   case 2:c = a - b;    break;   case 3:c = a * b;    break;   case 4:c = a / b;    break;   default:   break;    }    document.form1.textC.value = c;    }   </script>    </head>     <body>     <form name="form1">      <INPUT TYPE="text" NAME="textA">       <select name="selOpe" size=1>       <option value="1">+</option>       <option value="2">-</option>       <option value="3">×</option>       <option value="4">÷</option>       </select>        <INPUT TYPE="text" NAME="textB">         <input type="button" name="cmdCalc" value="=" onclick="Calc()">        <INPUT TYPE="text" NAME="textC">     </form>     </body> </html>

  • 最大10文字の10進数文字を16進数に変換し表示する

    最大10桁の16進数文字を数字の10進数で表示するコードを記述する事は出来たのですが、その逆が、どうしてもうまくいきません。16進数文字を数字の10進数で表示させるコードをベースに何処の箇所を修正すれば10進数文字を16進数に変換出来るのでしょうか?初心者で難しいコードが解らない為、ダラダラとしたコードで申し訳ございません。 また、今、C言語の文字列の勉強をしてる為、いくつか仕様がありますので、宜しくお願いします。 (1)入力された10進数文字を数値の10進数に変換させた後に、16進数の文字として表示させる。 (2)「printf」以外の関数は使用しない。 (3)最後に表示させる時は「%s」を使用する。 ------------------------------------------------- 【最大10桁の16進数文字を数字の10進数で表示】 #include "stdafx.h" #define MEX 10 /*「function」:入力文字された文字数*/ char ToInt( char cInt) { int mal=0; switch (cInt){ case '0': mal=0; break; case '1': mal=1; break; case '2': mal=2; break; case '3': mal=3; break; case '4': mal=4; break; case '5': mal=5; break; case '6': mal=6; break; case '7': mal=7; break; case '8': mal=8; break; case '9': mal=9; break; case 'a': mal=10; break; case 'A': mal=10; break; case 'b': mal=11; break; case 'B': mal=11; break; case 'c': mal=12; break; case 'C': mal=12; break; case 'd': mal=13; break; case 'D': mal=13; break; case 'e': mal=14; break; case 'E': mal=14; break; case 'f': mal=15; break; case 'F': mal=15; break; } return (mal); } /*「function」:位の計算*/ double HexAcc( double n ) { int i; double ans=1; for( i=0; i<n; i++ ){ ans *= 16; } return (ans); } int _tmain(int argc, _TCHAR* argv[]) { int i=0,n=0,j=0,k=0,s=0,m=0; char decimal[ 255 ], ditto[ 255 ],sub[ 255 ]; /*入力されない場合*/ if( argc > 1 ){ decimal[s] = argv[1][i]; } else{ printf("16進数を入力してください。\n"); return 1; } /*subに文字として'\0'を代入*/ for( k=0; k<=128; k++ ){ sub[k] = '0'; } /*入力された文字数を受取る*/ for( i=0; argv[1][i] != '\0'; i++ ){ decimal[i] = argv[1][i]; } decimal[i] = '\0'; /*空白文字のチェック*/ for( i=0; decimal[i] != '\0'; i++ ){ if( decimal[i] != ' ' ){ ditto[n] = decimal[i]; n++; } } /*'\0'を代入(文字列の終端)*/ ditto[n]='\0'; /*「0」から「9」のループ*/ for( n=0; ditto[n] != '\0'; n++ ){ if(( ditto[n] == '0' ) || ( ditto[n] == '1' ) || ( ditto[n] == '2' ) || ( ditto[n] == '3' ) || ( ditto[n] == '4' ) || ( ditto[n] == '5' ) || ( ditto[n] == '6' ) || ( ditto[n] == '7' ) || ( ditto[n] == '8' ) || ( ditto[n] == '9' ) || ( ditto[n] == 'A' ) || ( ditto[n] == 'B' ) || ( ditto[n] == 'C' ) || ( ditto[n] == 'D' ) || ( ditto[n] == 'E' ) || ( ditto[n] == 'F' ) || ( ditto[n] == 'a' ) || ( ditto[n] == 'b' ) || ( ditto[n] == 'c' ) || ( ditto[n] == 'd' ) || ( ditto[n] == 'e' ) || ( ditto[n] == 'f' )){ }else{ printf("エラー\n 16進数以外の文字が含まれております。\n"); return 0; } } /*桁数のループ*/ for( n=0; ditto[n] != '\0'; n++ ){ m = m + 1 ; } /*桁数の判断*/ if( m <= MEX ){ }else{ printf("エラー\n入力文字数は、%d文字以内にしてください。\n",MEX); return 0; } /*subにdittoを代入*/ for( n=0; ditto[n] != '\0'; n++){ sub[MEX-m+n] = ditto[n]; } /*'\0'を代入(文字列の終端)*/ sub[MEX] = '\0';*/ /*「double型:addの初期化」「int型:ans初期化」add・ansの初期化*/ double ans=0; double add=0; /*sub[0]からsub[9]の計算*/ for( n=0; sub[n] != '\0'; n++){ ans = ToInt(sub[n]); add += ans * HexAcc(MEX-n-1); } /*最大10桁の16進数文字を数字の10進数で表示*/ printf("最大10桁の16進数文字を数字の10進数に変換した値は %f \n",add);

  • 複数のプルダウンメニューの選択項目を変更するには?

    複数のプルダウンメニューを使ってページリンクをさせています。 その際ページリンクと同時に、他のメニューの選択項目を初期値す方法を教えてください。 No.157334で同じような質問があったので、それを参考に以下のように記述してみましたが、 function reSel(c) { for(i=0; i<9; i++){ var s="document.unit.DDList"; var x=s+i; if(x != c){ x.selectedIndex=0; //ココがうまくいきません。 } } } function Li_0(obj){ parent.res.location.href=obj.options[obj.selectedIndex].value; reSel("document.unit.DDList0"); } (以降 Li_8まで同様) <form name="unit" method="post"> <select name="DDList0" size="1" onChange="Li_0(this)"> <option value="help.html" selected> </option> <option value="unit_a.html">AAA</option> <option value="unit_b.html">BBB</option> </select> (以降 DDList8まで同様) です。 どうぞよろしくお願いいたします。

  • ステータスバーについて

    1 画像にマウスをおくと、ステータスバーに詳細が表示されるように設定したのですが、マウスをはずしても表示されっぱなしになります。マウスをはずしたら、何も表示されないようにするにはどうしたらいいのでしょうか? 2 「1」で、表示したものをスクロールさせたいのですが、スクリプトをどうくみあわせればいいのかわかりません。教えてください。 「1」のスクリプトを表示するので、できればこれをもとにおしえてください。 <SCRIPT language="JavaScript"> <!-- function msg(num){ switch(num){ case 0: text = "ρ(^^ )ノ サァドーゾ!!"; break; case 1: text = "e(^。^)g_ファイト!!"; break; case 2: text = "(;^_^A アセアセ・・・"; break; case 3: text = "(^ー^)ノ ヨロシク "; break; case 4: text = "さようなら~(^o^)/~"; break; } document.form1.text1.value = text; } //--> </SCRIPT>