先日も質問したものなんですがお願いします。
リストボックスで検索すると結果いくつもあるのですが、
いずれもセレクトボックスの様です。
私が教えてほしいのは、リストボックスから選択した項目を次のリストボックス、更に選択し次のリストボックスに・・・と3連続した結果、4番目のリストボックスに答えを表示したいのですが分かりません。
いろいろ調べてこんなのがありましたので引用させていただきましたがこれは2番目で結果が表示します。このソースをいろいろ変更したりしてみたんですが、うまくいきません。どなたか教えてくださいお願いします。
これ以外でも結構です。
<html lang="ja">
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>sample</title>
<style type="text/css">
select { width: 100px; }
</style>
<script type="text/javascript">
//左リスト用連想配列
//キーは0からの連番にして下さい。アイテムが左リストのテキストになります。
var l_Array = {
'0' : '大阪', '1' : '京都', '2' : '兵庫', '3' : '奈良', '4' : '滋賀'
}
//右リストボックス用連想配列
//左リストのvalueをキーにします。
//アイテムはカンマで区切れば幾つにでも出来ます。
var r_Array = {
'0' : 'たこ焼き,通天閣',
'1' : 'やつはし,清水寺',
'2' : '明石焼き,甲子園',
'3' : '奈良漬,法隆寺,せんとくん,まんとくん',
'4' : '鮒寿司,琵琶湖'
}
//左リストのオプション群をhtmlソース中に
//直接書くのであれば、この関数は実行不要です。
function makeLeft() {
var sel = document.getElementById('l_sel');
var i;
for (i in l_Array) {
var opt = document.createElement('OPTION');
opt.setAttribute('value', i);
var tn = document.createTextNode(l_Array[i]);
opt.appendChild(tn);
sel.appendChild(opt);
}
}
//この関数で右側のアイテムを入替えてます。
//右リストのvalueは、左リストのvalue+0からの連番となります。
function repRight(e) {
var sel = document.getElementById('r_sel');
while (sel.hasChildNodes()) { sel.removeChild(sel.firstChild); }
var tgt = e.target || e.srcElement
var optArray = r_Array[tgt.value].split(',');
for (var i = 0; i < optArray.length; i++) {
var opt = document.createElement('OPTION');
opt.setAttribute('value', '' + tgt.value + i);
var tn = document.createTextNode(optArray[i]);
opt.appendChild(tn);
sel.appendChild(opt);
}
}
</script>
</head>
<body onload="makeLeft();"> <!-- makeLeftを実行しない場合は <body> とする -->
<table>
<tr>
<td>
<form name="l_frm" id="l_frm">
<select name="l_sel" id="l_sel" size=10 onchange="repRight(event);">
<!--
<option value="0">大阪</option>
<option value="1">京都</option>
<option value="2">兵庫</option>
<option value="3">奈良</option>
<option value="4">滋賀</option>
-->
</select>
</from>
</td>
<td>
<form name="r_frm" id="r_frm">
<select name="r_sel" id="r_sel" size=10>
</select>
</from>
</td>
</tr>
</table>
</body>
</html>
No.2ベストアンサー
- 回答日時:
<html>
<head><style> select{width:20ex;}</style></head>
<body>
<script>
window.onload = setList;
function $(o) { return document.getElementById(o); }
function setList(n){
switch(n){
default : mkopt(0,'q1:NISSAN q2:HONDA');break;
case 'q1': mkopt(1,'q11:スカイライン q12:Z'); break;
case 'q2': mkopt(1,'q21:NS-X q22:S2000'); break;
case 'q11': mkopt(2,'q111:R33 q112:GTR'); break;
case 'q12': mkopt(2,'q121:ノーマル q122:ニスモ仕様'); break;
case 'q21': mkopt(2,'q131:Type-R q132:Type-S'); break;
case 'q22': mkopt(2,'q141:Type-V q142:バリバリ仕様'); break;
case 'q111': mkopt(3,'q1001:普通 q1002:事故車'); break;
case 'q112': mkopt(3,'q1003:777万円 q1004:中古ないかも'); break;
case 'q121': mkopt(3,'q1005:オープン q1006:ノーマル'); break;
case 'q122': mkopt(3,'q1007:見た目だけ q1008:バリバリ'); break;
case 'q131': mkopt(3,'q101:無事故 q102:事故車'); break;
case 'q132': mkopt(3,'q10:製造中止 q102:中古'); break;
case 'q141': mkopt(3,'q101:17インチ q102:18インチ'); break;
case 'q142': mkopt(3,'q101:見た目仕様 q102:つくせる限り'); break;
}
}
function mkopt(n,s){
var str=s.split(' '),o=$('L'+n);
while(o.hasChildNodes()) o.removeChild(o.lastChild);
for(i in str){
var opt=document.createElement('OPTION');
var buf=str[i].split(':');
with(opt){ setAttribute('value', buf[0]); appendChild(document.createTextNode(buf[1]));}
with(o){ appendChild(opt);focus();}
}
}
</script>
</head>
<body>
<input type="hidden" value="abc" id="LL">
<select id="L0" size="10" onChange="setList(this.value)"></select>
<select id="L1" size="10" onChange="setList(this.value)"></select>
<select id="L2" size="10" onChange="setList(this.value)"></select>
<select id="L3" size="10" onChange="setList(this.value)"></select>
</body>
</html>
_pipi_様早々にご回答戴き誠に有り難うございました。
正しく私の意図を理解してくださいまして、本当に感謝申し上げます。
早速参考にして使わせて戴きます。
私も、レベルアップを図って参りますので、今後も何卒よろしくお願いします。
No.3
- 回答日時:
リストにするならsize="10"を消す
default : mkopt(0,': q1:NISSAN q2:HONDA');break;
のように、「:」と半角空白を追加すればいいかも。
<input type="hidden" value="abc" id="LL">
は必要ありません。消してください
追加したければ、コードも短いので簡単でしょう!^^;
No.1
- 回答日時:
1番目、2番目を選択すると3番目に答えが表示されるプログラムを書いてみました。
プルダウンが4つでも5つでも簡単に変更できるように作ってありますので、
処理の流れを追ってみて、必要に応じて書き換えてみてください。
関数は書き換え不要です。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<script type="text/javascript"><!--
function ResetOptions( index )
{
var select = document.getElementById( "select" + index );
while( select ) {
for( var i = 0, len = select.length; i < len; i++ ) {
select.options[0] = null;
}
CreateOption( select, "", "項目" + ( index - 1 ) + "を選択してください" );
index++;
select = document.getElementById( "select" + index );
}
}
function CreateOption( select, key, value )
{
var option = document.createElement( "OPTION" );
option.setAttribute( "value", key );
var text = document.createTextNode( value );
option.appendChild( text );
select.appendChild( option );
}
function CreateOptions( index, value, pleaseSelect )
{
var select = document.getElementById( "select" + index );
if( ! select ) {
return;
}
for( var i = 0, len = select.length; i < len; i++ ) {
select.options[0] = null;
}
var option, text, list;
if( index > 1 ) {
if( value ) {
list = dataList[index-1][value];
}
else {
ResetOptions( index );
return;
}
}
else {
list = dataList[0];
}
if( pleaseSelect ) {
CreateOption( select, "", "↓選択してください" );
}
for( var key in list ) {
CreateOption( select, key, list[key] );
}
ResetOptions( index + 1 );
}
var dataList = [
{ "asia": "アジア", "europe": "ヨーロッパ", "south_america": "南米" },
{
"asia" : { "japan": "日本", "korea": "韓国" },
"europe": { "italy": "イタリア", "spain": "スペイン", "sweden": "スウェーデン" },
"south_america": { "brazil": "ブラジル", "argentina": "アルゼンチン" }
},
{
"japan": { "": "38位" },
"korea": { "": "45位" },
"italy": { "": "3位" },
"spain": { "": "4位" },
"sweden": { "": "30位" },
"brazil": { "": "2位" },
"argentina": { "": "1位" }
}
];
window.onload = function() {
CreateOptions( 1, null, true );
ResetOptions( 2 );
};
//--></script>
</head>
<body>
<h1>サッカー世界ランク</h1>
<p>地域:<select id="select1" onchange="CreateOptions( 2, this.options[this.selectedIndex].value, true );"></select></p>
<p>国:<select id="select2" onchange="CreateOptions( 3, this.options[this.selectedIndex].value, false );"></select></p>
<p>順位:<select id="select3"></select></p>
</body>
</html>
oka5130様早々にご回答戴きありがとうございます。
今回の疑問点でより深く広いところまで勉強したいと思いました。
参考にして作成したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Selectの中身をfor文で入れる
-
Selectボックスの幅を自動で広...
-
プルダウン 項目が多いので先頭...
-
CSVファイルを読みこみ、プルダ...
-
html selectの内容を初期値に戻す
-
innerHTML内では改行は禁止?
-
javascriptでクイズ
-
クリックされた罫表セルの行番...
-
複数Formから値を取得するやりかた
-
特定<table>内の<td>の色を変える
-
slickのレスポンシブ > center...
-
Nameは配列で、チェックされた...
-
submitした値を返したい
-
jQueryでクリックされたテーブ...
-
Cookieに保存されない
-
同一nameの input type="text"...
-
インラインフレームから親ウィ...
-
クリックさせたいが、click()が...
-
name属性が同じフォームが複数...
-
プルダウンの選択内容を次のペ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
Selectの中身をfor文で入れる
-
html selectの内容を初期値に戻す
-
JQuery selectが反映されない
-
jQuery セレクトボックスで選択...
-
CSVファイルを読みこみ、プルダ...
-
セレクトを全て選択されていな...
-
現在時刻を取得してフォームのs...
-
セレクトの値を取得できない
-
リストボックスの項目の順番を...
-
onchange等のイベントハンドラ...
-
テーブルにおける行(セルにプル...
-
onFocusOutが複数回呼ばれる!
-
javascriptでプルダウンメニュ...
-
ブラウザの戻るボタンを押した...
-
<textarea>にプルダウンを表示...
-
javascriptでの2つのプルダウン...
-
selectタグに直接onChangeを書...
-
window.openで新しいタブが開か...
おすすめ情報