![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
以下のように、最初の親セレクトボックスで2番目の子セレクトボックスの選択肢を絞り込む、ソースコードがあります。
同じHTML中に全く別の選択要素を持った、同じ働きをする親子セレクトボックスを複数設置したいのですが(例えば、親要素=学区、子要素=その学区内毎の学校名)、お互いに干渉しない様に、2つ目以降の親子セレクトボックスを複数設置して行くには、2番目以降をどの様に改良したらよろしいでしょうか。
ご教授下さい。
以下HEAD要素========
names1=new Array('↓駅名を選んで下さい','A駅','B駅','C駅','D駅','E駅');
value1=new Array('↓駅名を選んで下さい','A駅','B駅','C駅','D駅','E駅');
names2=new Array('↓駅名を選んで下さい','F駅','G駅','H駅','I駅');
value2=new Array('↓駅名を選んで下さい','F駅','G駅','H駅','I駅');
names3=new Array('↓駅名を選んで下さい','J駅','K駅','L駅');
value3=new Array('↓駅名を選んで下さい','J駅','K駅','L駅');
names=new Array('',names1,names2,names3);
values=new Array('',value1,value2,value3);
len=0;
for(i=0; i<names.length; i++)if(names[i].length > len)len=names[i].length;
dore=0;
function SelectChange(no){
if(no < 9){
no = '0'+no;
}
dore=document.getElementById('LINE'+no).selectedIndex;
if(dore != 0){
atai=0;
for(i=0; i<len; i++){
if(names[dore].length < len && names[dore].length <= i){
document.getElementById("STA"+no+1).options[i-atai]=null;
atai++;
}else{
document.getElementById("STA"+no+1).options[i]=new Option(names[dore][i],i);
document.getElementById("STA"+no+1).options[i].value=values[dore][i];
}
}
}
}
以下BODY要素========
親=
<select name=LINE01 id=LINE01 onChange=SelectChange(1) style="width:160px;">
<option value=''>↓沿線名を選んで下さい</option>
<option value='路線1線'>路線1線</option>
<option value='路線2線'>路線2線</option>
<option value='路線3線'>路線3線</option>
</select>
子=
<select id=STA011 style="width:160px;" size=1 name=STA011>
<option name=1 id=1 value=''>--------</option>
</select>
No.1ベストアンサー
- 回答日時:
たとえば・・・
選択した”次の”セレクトボックスの値を変更すればよいでしょう。
ちなみに、競合しないのでセレクトボックスごとに路線の組み合わせは
自由にできます。
あとは路線の構造があまりに・・・だったので、こんな感じが
わかりやすいと思います。
<script>
function SelectChange(obj){
var datas={
"路線1線":[{"name":"A駅","value":"AA駅"},{"name":"B駅","value":"BB駅"},{"name":"C駅","value":"CC駅"},{"name":"D駅","value":"DD駅"},{"name":"E駅","value":"EE駅"}]
,"路線2線":[{"name":"F駅","value":"FF駅"},{"name":"G駅","value":"G駅"},{"name":"H駅","value":"H駅"},{"name":"I駅","value":"I駅"}]
,"路線3線":[{"name":"J駅","value":"JJ駅"},{"name":"K駅","value":"KK駅"},{"name":"L駅","value":"LL駅"}]
,"路線4線":[{"name":"M駅","value":"MM駅"},{"name":"N駅","value":"NN駅"}]
};
var n=obj;
while(n=n.nextSibling){if(n.nodeName=="SELECT") break;} //次のSELECTを探す
while(n.firstChild){n.removeChild(n.firstChild);} //次のSELECTの中身を削除
var opt=document.createElement("option");
if(obj.value==""){
//路線を選ばなかった場合の処理
opt.setAttribute("value","");
opt.appendChild(document.createTextNode("--------"));
n.appendChild(opt);
}else{
//路線を選ばんだ場合の1行目処理
opt.setAttribute("value","");
opt.appendChild(document.createTextNode("↓駅名を選んで下さい"));
n.appendChild(opt);
//オプションを入れ込む処理
var data=datas[obj.value];
for(var i=0;i<data.length;i++){
var opt=document.createElement("option");
opt.setAttribute("value",data[i].value);
opt.appendChild(document.createTextNode(data[i].name));
n.appendChild(opt);
}
}
}
</script>
<style>
#f0 select{
width:160px;
}
</style>
<form id="f0">
<div>
<select name="LINE01" onChange="SelectChange(this)">
<option value=''>↓沿線名を選んで下さい</option>
<option value='路線1線'>路線1線</option>
<option value='路線2線'>路線2線</option>
<option value='路線3線'>路線3線</option>
</select>
<select name="STA011">
<option value=''>--------</option>
</select>
</div>
<div>
<select name="LINE02" onChange="SelectChange(this)">
<option value=''>↓沿線名を選んで下さい</option>
<option value='路線1線'>路線1線</option>
<option value='路線2線'>路線2線</option>
</select>
<select name="STA022">
<option value=''>--------</option>
</select>
</div>
<div>
<select name="LINE03" onChange="SelectChange(this)">
<option value=''>↓沿線名を選んで下さい</option>
<option value='路線1線'>路線1線</option>
<option value='路線3線'>路線3線</option>
<option value='路線4線'>路線4線</option>
</select>
<select name="STA033">
<option value=''>--------</option>
</select>
</div>
</form>
yambejp様
早速のご返答、有難うございました。
各テキストボックスが競合していないので、
様々な組み合わせで登録の設定ができそうです。
期待した結果を得る事ができました。
有難うございました。
No.2
- 回答日時:
普通に考えれば、
配列を1次元を増やして、selectの数に対応するようにする。
とか、
オブジェクト的に対応できるように書き換える。
みたいになるでしょうけど、連動セレクトの処理をライブラリ化したものがあるみたい。
http://d.hatena.ne.jp/Mars/20071109
HTML側にデータを持たせているので、javascriptがオフの場合でも一応動作できるように考えられているようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
<input>の選択肢をプルダウンメ...
-
selectを変更不可にしたい
-
3つのselectでURLパラメータを...
-
同じ名前のセレクトがある場合...
-
ラジオボタンの選択に応じてプ...
-
プルダウンの値によって活性・...
-
javascriptでセレクトボックス...
-
3つの連動したプルダウンメニュ...
-
ラジオボタンとプルダウンを連...
-
VBScriptでHTMLのセレクトボッ...
-
selectで選ばれた値を別ページ...
-
javascriptでoptionタグを削除...
-
2つのプルダウンメニューで、同...
-
JavaScriptの質問です。どなた...
-
Selectボックスの一覧表示方法
-
select要素のvalueを配列で取得...
-
セレクトボタンで特定の項目で...
-
今日の日付を自動的にセレクト...
-
ラジオボタンの値が取得できな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセレクトボックス...
-
selectを変更不可にしたい
-
全てのselect要素をデフォルト...
-
<input>の選択肢をプルダウンメ...
-
Selectボックスの一覧表示方法
-
プルダウン選択を変更すると、...
-
セレクトボックスで配列を呼び...
-
JavaScriptで<select>の<option...
-
プルダウンのoptionの表示・非...
-
select要素のvalueを配列で取得...
-
【javascript】連想配列からセ...
-
ラジオボタンとプルダウンを連...
-
同じ名前のセレクトがある場合...
-
selectボックスの選択結果を変...
-
プルダウンの値によって活性・...
-
javascriptで合計金額を算出し...
-
プルダウンメニューに連動する...
-
VBScriptでHTMLのセレクトボッ...
-
リストボックス内の重複したも...
-
連想配列を使ってコンボボック...
おすすめ情報