いつも参考にさせて頂いております。
javascript初心者です。
現在、javascriptにてセレクトメニューの4連動を作成しているのですが、4つ目のセレクトメニューを正常に動かすことが出来ません・・・。何とか3つまでは動くようになったのですが・・・。忙しいところを申し訳ありませんが、教えて下さい。
一つ目のセレクトで、地域の選択
二つ目のセレクトで、県の選択
三つ目のセレクトで、「プレイスポット」か「食事」の選択
四つ目のセレクトでは、
プレイスポット名(三つ目でプレイスポット選択時)
お店名(三つ目で食事選択時)
上記したようにしたいのです。宜しくお願いします。
<html>
<head>
<script type="text/javascript">
<!--
var area=0;
function setA(n)
{
aa=n;
data1 =
[
["東京","神奈川"],
["大阪","神戸"],
];
len = document.form1.box_a.options.length;
for(i=len-1; i>0; --i)
document.form1.box_a.options[i] = null;
if(n!=0)
{
document.form1.box_a.style.visibility = "visible";
for(i=0; i<data1[n-1].length; i++)
document.form1.box_a.options[i+1] = new Option(data1[n-1][i]);
}
setB(0);
}
function setB(n)
{
data2 =
[
[["プレイスポット","食事"],["プレイスポット","食事"]],
[["プレイスポット","食事"],["プレイスポット","食事"]]
];
len = document.form1.box_b.options.length;
for(i=len-1; i>0; --i)
document.form1.box_b.options[i] = null;
if(n==0)return;
document.form1.box_b.style.visibility = "visible";
for(i=0; i<data2[aa-1][n-1].length; i++)
document.form1.box_b.options[i+1] = new Option(data2[aa-1][n-1][i]);
setC(0);
}
function setC(n)
{
data3 =
[
[[["としまえん","よみうりランド"],["キハチ","久兵衛"]]],
[[["江ノ島","鎌倉"],["カレーミュージアム","中華街"]]],
[[["ユニバーサルスタジオ","天王寺動物園"],["かに道楽","金龍ラーメン"]]],
[[["須磨海浜水族園","グリコピア"],["コンチェルト","六甲山牧場"]]]
];
len = document.form1.box_c.options.length;
for(i=len-1; i>0; --i)
document.form1.box_c.options[i] = null;
if(n==0)return;
document.form1.box_c.style.visibility = "visible";
for(i=0; i<data3[aa-1][n-1][n-1].length; i++)
document.form1.box_c.options[i+1] = new Option(data3[aa-1][n-1][n-1][i]);
}
//-->
</script>
</head>
<body>
<form name="form1">
<select name="sel1" onChange="setA(this.selectedIndex)">
<option value="0" selected>▼選択してください</option>
<option value="1">関東</option>
<option value="2">関西</option>
</select>
<select name="box_a" onChange="setB(this.selectedIndex)"><option value="0" selected>---------------</option></select>
<select name="box_b" onChange="setC(this.selectedIndex)"><option value="0" selected>---------------</option></select>
<select name="box_c" onChange=""><option value="0" selected>---------------</option></select>
</form>
</body>
</html>
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
データ構造がわかりにくい・・・
最終的に必要なのは4番目のセレクトメニューだけですよね?
ならいっそのことこんなかんじでどうでしょ?
<html>
<head>
<style>
select{
width:150px;
}
</style>
<script>
var data={
関東:{
東京:{
プレイスポット:{0:"としまえん",1:"よみうりランド"}
,食事:{0:"キハチ",1:"久兵衛"}
}
,神奈川:{
プレイスポット:{0:"江ノ島",1:"鎌倉"}
,食事:{0:"カレーミュージアム",1:"中華街"}
}
}
,関西:{
大阪:{
プレイスポット:{0:"ユニバーサルスタジオ",1:"天王寺動物園"}
,食事:{0:"かに道楽",1:"金龍ラーメン"}
}
,神戸:{
プレイスポット:{0:"須磨海浜水族園",1:"グリコピア"}
,食事:{0:"コンチェルト",1:"六甲山牧場"}
}
}
};
window.onload=function(){
s0=document.getElementById("s0");
s1=document.getElementById("s1");
s2=document.getElementById("s2");
s3=document.getElementById("s3");
setSelect(data,s0);
s0.onchange=function(){
clearSelect(s2);
clearSelect(s3);
if(this.value==""){
clearSelect(s1);
}else{
setSelect(data[this.value],s1);
}
}
s1.onchange=function(){
clearSelect(s3);
if(this.value==""){
clearSelect(s2);
}else{
setSelect(data[s0.value][this.value],s2);
}
}
s2.onchange=function(){
if(this.value==""){
clearSelect(s3);
}else{
setSelect(data[s0.value][s1.value][this.value],s3);
}
}
}
function setSelect(obj,sel){
while(lc=sel.lastChild){
sel.removeChild(lc);
};
var op=document.createElement("option");
op.setAttribute("value","");
op.appendChild(document.createTextNode("▼選択してください"));
sel.appendChild(op);
for(var i in obj){
var txt=(typeof obj[i]=="object")?i:obj[i];
var op=document.createElement("option");
op.setAttribute("value",i);
op.appendChild(document.createTextNode(txt));
sel.appendChild(op);
}
}
function clearSelect(sel){
while(lc=sel.lastChild){
sel.removeChild(lc);
};
var op=document.createElement("option");
op.appendChild(document.createTextNode("---------------"));
sel.appendChild(op);
};
</script>
</head>
<body>
<form id="f0">
<select id="s0">
<option value="">▼選択してください</option>
</select>
<select id="s1">
<option value="">---------------</option>
</select>
<select id="s2">
<option value="">---------------</option>
</select>
<select id="s3" name="place">
<option value="">---------------</option>
</select>
</form>
</body>
</html>
No.3
- 回答日時:
「訂正」最後のfor文も同じくbbを使います。
今は数が同じだからそのままでも動きました。for(i=0; i<data3[aa-1][bb-1][n-1].length; i++)
No.2
- 回答日時:
・ 配列がむやみに複雑になっていて改良の余地があると思いますが、とりあえず修正点を挙げてみます。
・ setA(n)のaa=n;と同じように、setB(n)にbb=n; を加えます。それを、setC(n)の
document.form1.box_c.options[i+1] = new Option(data3[aa-1][bb-1][n-1][i]);
で利用します。
・ 配列data3の構造を変えます。
以下のコードを参考にしてみてください。
------------------------------------------------------------
function setB(n)
{
bb=n;
data2 =
------------------------------------------------------------
function setC(n)
{
data3 =
[
[
[["としまえん","よみうりランド"],["キハチ","久兵衛"]],
[["江ノ島","鎌倉"],["カレーミュージアム","中華街"]]
],
[
[["ユニバーサルスタジオ","天王寺動物園"],["かに道楽","金龍ラーメン"]],
[["須磨海浜水族園","グリコピア"],["コンチェルト","六甲山牧場"]]
]
];
len = document.form1.box_c.options.length;
for(i=len-1; i>0; --i)
document.form1.box_c.options[i] = null;
if(n==0)return;
document.form1.box_c.style.visibility = "visible";
for(i=0; i<data3[aa-1][n-1][n-1].length; i++)
document.form1.box_c.options[i+1] = new Option(data3[aa-1][bb-1][n-1][i]);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- 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 セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
セレクトの値を取得できない
-
html selectの内容を初期値に戻す
-
jspに組込んだJavaScript でjava文
-
CSVファイルを読みこみ、プルダ...
-
セレクトを全て選択されていな...
-
Selectの中身をfor文で入れる
-
プルダウンとテキストの連動
-
javascriptでの2つのプルダウン...
-
jQuery セレクトボックスで選択...
-
現在時刻を取得してフォームのs...
-
onFocusOutが複数回呼ばれる!
-
int select(int n, fd_set *rea...
-
<textarea>にプルダウンを表示...
-
リストボックスの項目の順番を...
-
selectメニューのselectedの位...
-
<input>の選択肢をプルダウンメ...
-
TextBoxに半角数字以外を入れた...
-
【jQuery】input nameの文字列...
-
value内に変数を入れたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
jQuery セレクトボックスで選択...
-
Selectの中身をfor文で入れる
-
html selectの内容を初期値に戻す
-
CSVファイルを読みこみ、プルダ...
-
JQuery selectが反映されない
-
セレクトの値を取得できない
-
セレクトを全て選択されていな...
-
セレクトメニューで選択された...
-
ブラウザの戻るボタンを押した...
-
javascriptでselectボックスの<...
-
リストボックスの項目の順番を...
-
現在時刻を取得してフォームのs...
-
onFocusOutが複数回呼ばれる!
-
セレクトボックスで現在選択さ...
-
【javascript・PHP】プルダウン...
-
document.form で nullまたは...
-
プルダウンで現在の年月日を取...
-
onchange等のイベントハンドラ...
おすすめ情報