• ベストアンサー

セレクトメニューに文字列をセットする方法

JavaScriptを勉強し始めてまだ1ヵ月の初心者です。 どうしても分からず先に進めません。どうか、教えて下さい。 よろしくお願い致します。 下記の文字列を配列や連想配列などを使用して、二段構えのセレクトメニューを作成したいのです。 ちなみに、PHPでHIDDENを使用して文字列をセットしています。 A0,0001,あああ,A0,0002,いいい,B0,1111,かかか, B0,1112,ききき,B0,1113,くくく,C0,1500,さささ… このような文字列を使用し、「A0,0001,あああ」が1レコードのイメージです。 一つ目のセレクトメニューで、頭のA0,B0,C0…を選択し、さらに二つ目のセレクトメニューでは、 一つ目で選択したものによって選択されたものの後半部分がそれぞれメニューに表示されるようにしたいのです。 自分なりにいろんなサイトや書籍で調べてみたのですが、分かりませんでした。 質問の内容も分かり難いかと思いますが、どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえず以下のような形で動くとおもいますが、 PHPで組んでいるなら明らかにPHP側で処理をしたほうが 確実です。 <script language="javascript"> window.onload=function(){ str=document.getElementById("data").value; list1=str.split(","); list2=new Object(); for(var i=0;i<list1.length;i+=3){ str2=list1[i]; if(typeof list2[str2]=="undefined") list2[str2]=new Array(); list2len=list2[str2].length list2[str2][list2len]=new Object(); list2[str2][list2len].value=list1[i+1] list2[str2][list2len].text =list1[i+2] } var menu1="<select onChange='setMenu2(this)'>"; menu1+="<option value=''>選択してください</option>" for(var i in list2){ menu1+="<option value='"+i+"'>"+i+"</option>"; } menu1+="</select>"; document.getElementById("menu1").innerHTML=menu1 } function setMenu2(obj){ var v=obj.value var menu2="<select onChange='alert(this.value)'>"; menu2+="<option value=''>選択してください" for(var i=0;i<list2[v].length;i++){ menu2+="<option value='"+list2[v][i].value+"'>"+list2[v][i].text; } menu2+="</select>"; document.getElementById("menu2").innerHTML=menu2 } </script> <form> <input type="hidden" id="data" value="A0,0001,あああ,A0,0002,いいい,B0,1111,かかか,B0,1112,ききき,B0,1113,くくく,C0,1500,さささ"> <div id="menu1"></div> <div id="menu2"><select><option>選択してください</option></select></div> </form>

morizoukun
質問者

お礼

詳しい解説ありがとうございます!! 無事動作いたしました。 教えて頂いた方法があるなんてとても勉強になりました。 差し支えなければ今後のためにPHP側の処理の方法を教えてもらいたいのですが、よろしければお願いいたします。 本当にありがとうございました。

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

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

セレクトメニューを絞り込むようなものは、何回か質問に挙がっています。 手前味噌ですが、以下が参考になるかもしれません。 http://okwave.jp/qa1469713.html

参考URL:
http://okwave.jp/qa1469713.html
morizoukun
質問者

お礼

ご回答ありがとうございます。これを参考にがんばってみます。

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

関連するQ&A

  • ボタンを押してテキストに文字をセットする

    教えてください。 画面イメージが Aテキスト ボタン Bテキストのように配置しています。 そこでAテキストにコードを入力後にボタンを押してBテキストに名称をセットするようにしたいのですが。 検索する文字列はhiddenでセットしています。 30112900,A商店,45890736,B商店,78653672,C商店・・・ このような文字列を使用し、「30112900,A商店」が1レコードのイメージです。 Aテキストに「45890736」を入力してボタンを押すと文字列から検索してBテキストに「B商店」を表示されるようにしたいのです。 質問の内容も分かり難いかと思いますが、どうぞ宜しくお願い致します。

  • セレクトメニュー選択でもう一つセレクトメニューを出す

    「ブロック名」のセレクトメニューを選択すると、選択した項目によってもう一つ「部署名」のセレクトメニューが出て選択するようにしたいと思い、途中まで作成しました。 しかし、「ブロック名」を「Aブロック」選択しても「部署名」が「Bトップ~」が出てしまいます。 何がおかしいのか分からないので、ぜひ教えてください。 よろしくお願いいたします。 menuItem = [  ["Aトップ","A本部","B本部","C本部"], ["Bトップ","1本部","2本部","3本部"], ["Cトップ","あ本部","い本部","う本部"],         ["Dトップ","●本部","▲本部","◆本部"] ]; function setMenuItem(n) { len = document.form2.BUSYO.options.length; for (i=0; i<len; i++) { document.form2.BUSYO.options[i] = null; } document.form2.BUSYO.style.visibility = "visible"; for (i=0; i<menuItem[n].length; i++) { document.form2.BUSYO.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } ---------------------------------------------------------------- <SELECT size="1" name="Block" onChange="setMenuItem(this.selectedIndex)"> <OPTION selected value="0">選択してください</OPTION> <OPTION value="a-block">Aブロック</OPTION> <OPTION value="b-block">Bブロック</OPTION> <OPTION value="c-block">Cブロック</OPTION> <OPTION value="d-block">Dブロック</OPTION> </SELECT> <SELECT size="1" name="BUSYO" style="visibility:hidden"> <OPTION selected value="0">選択してください</OPTION> </SELECT>

  • セレクトメニューの選択項目によって、もう1つのセレクトメニューの項目と項目数を変更する

    もう1つのセレクトメニューの項目数が同じタイプのものは、ネット上で見つけられたのですが、項目の数も違うものは見つかりませんでした。 たとえば、1つ目のセレクトメニューでAタイプとCタイプを選択すると、2つ目のセレクトメニューでは5項目から選択でき、Bタイプを選択すると、3項目から選択できるという風にしたいです。ご助言お願いします。

  • ファイルメーカーでの文字列のカウントについて

    初めまして、ファイルメーカー初心者です。 まずやりたいことは、下記になります。 フィールドでプルダウン選択された文字列の合計を 別フィールドに表示したい。 例えばA・B・Cという文字列をレコードによって それぞれ選択します。 その集計を現在どれだけAを使用したか、など 表示しておきたいのです。 If( (×××) = "A" , Count(×××) , 0 ) と数式を組んでみたところ、全レコードの合計ではなく ひとつのレコードの数しか合計に表示されませんでした。 どなたかおわかりになる方いらっしゃいましたら ご回答お待ちしております。 よろしくお願いいたします。

  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。

  • accessで複数カラムの組み合わせ文字列をselect

    エクセルVBAからaccessにクエリを送る際のselectクエリの書き方について教えてください。 VBAから指定する文字列strが、accessのカラムa,b,cのハイフン区切りの文字列と一致した場合のみselectしたいのですが、select文はどのように書けばよいでしょうか? (VBAでstrをハイフンなしにばらさない場合) ------------------- str='0-1-2' ↓ select * from aaa where カラムa=0 and カラムb=1 and カラムc=2 ↓ 「and」なしで書く場合は? -------------------

  • 文字列の足し算

    お世話になっております。 例えば変数で a = 10 b = "10" c = 20 d = "20" とあったとします。 そこで、 a + b = 20 a + c = 30 b + d = 1020 文字列同士を足すと文字を連結させてしまいます。 当たり前ですが・・・・ そこで、この文字列(b + d)の結果を30に出来ないでしょうか? よろしくお願い致します

  • セレクトメニューからもう一つのセレクトメニューを選択したか確認

    「ブロック名」のセレクトメニューを選択すると、選択した項目によってもう一つ「部署名」のセレクトメニューが出て選択するようにしました。 送信前に「ブロック名」だけでなく、「部署名」も選択したかそうか確認したのですが、どうしでも出来ません。 いろいろ試しても出来なくて困っています。 ぜひ教えてください。 よろしくお願いいたします。 ---------------------------------------------------------------- menuItem =[[" "], ["(2) 部署を選択 ","あああ","いいい"],      ["(2) 部署を選択 ","ううう","えええ"], ["(2) 部署を選択 ","おおお","かかか"],      ["(2) 部署を選択 ","ききき","くくく"]]; function setMenuItem(n) { len = document.form2.BUSYO.options.length; for (i=0; i<len; i++) { document.form2.BUSYO.options[i] = null; } document.form2.BUSYO.style.visibility = "visible"; for (i=0; i<menuItem[n].length; i++) { document.form2.BUSYO.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } ---------------------------------------------------- <SELECT size="1" name="AREA" onchange="setMenuItem(this.selectedIndex)" style="color : #3d3d3d;"> <OPTION value="0" selected>(1) ブロックを選択 </OPTION> <OPTION value="Aブロック">Aブロック</OPTION> <OPTION value="Bブロック">Bブロック</OPTION> <OPTION value="Cブロック">Cブロック</OPTION> <OPTION value="Dブロック">Dブロック</OPTION> </SELECT> <SELECT size="1" name="BUSYO" style="color : #3d3d3d;visibility : hidden;"> <OPTION selected value="0"></OPTION> </SELECT> ---------------------------------------------------------------- 確認用 if(document.form2.AREA.value=="0"){ alert("ブロックを選択してください"); return false; } return true; }

  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHP コードを文字列として出力する方法

    お世話になります ダブルクォーテーションで囲っても 「PHP コード」を「文字列」として出力する方法 つまり、evalの逆の関数のようなものはありますでしょうか $a['huga'] = 2; $b['hoge'] = 3; //式 $c = $a['huga'] * $b['hoge'] ; abc($c = $a['huga'] * $b['hoge'] ); function abc($str){ //ここでなんちゃらほんちゃら //もしくはfunctionの外側でなんちゃらもでも可 echo $str; } 期待する出力結果 $c = $a['huga'] * $b['hoge'] ; 実際の結果 6 $の前に¥を入れてダブルクォーテーションで囲めば、 または、シングルクォーテーションの前に¥を入れてシングルクォーテーションで囲めば 文字列になるのはわかりますが 式の文字列には直接、手を加えず関数等で実現するやり方が知りたいです ※連想配列のキーの囲み文字はシングルクォーテーションです、ダブルに出来ない条件でお願いします。 お忙しい中恐縮ですが熟練者の方でわかる方がいましたら お教え下さいませ

    • ベストアンサー
    • PHP