• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セレクトメニューセレクトメニューへのジャンプ)

セレクトメニューの項目をリンクさせて変更する方法

このQ&Aのポイント
  • セレクトメニューの選択項目に応じて、他のセレクトメニューの内容を変更する方法を知りたいです。
  • さらに複数のセレクトメニューの項目をリンクさせて変更することは可能でしょうか?
  • 具体的な実装方法やサンプルコードなど、情報をお持ちの方がいらっしゃいましたら教えてください。

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

こんな感じになります。 サンプルのセレクトは3つです。 初心者ということで甘えず、セレクト4つ に対応できるよう、頑張ってください。 ★★★★★★★★★★★★★★★★ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <script language="javascript"> <!--// // var strfruit = new Array("ミカン","ブドウ","サクランボ"); // var strmikan = new Array("温州","甘夏","八朔","伊予柑"); var strbudou = new Array("デラウェア","巨峰","マスカット"); var strsakuranbo = new Array("高砂","佐藤錦","ナポレオン"); // var strunsyu = new Array("200","202","203"); var stramanatu = new Array("210","212"); var strhassaku = new Array("220","222","224"); var striyokan = new Array("230","232"); // var strdela = new Array("300","302","303"); var strkyoho = new Array("310","312"); var strhassaku = new Array("320","322","324"); var strmascut = new Array("330","332"); // var strtakasago = new Array("400","402","403"); var strsatou = new Array("410","412"); var strhnapoleon = new Array("420","422","424"); // function CreateList() { Create(document.frmSample.lstsel1, strfruit); CreateList2(); } //クリア関数 function Clearsel2() { //現在のプルダウンBの個数分削除する for (nDel = document.frmSample.lstsel2.options.length -1; nDel >= 0 ; nDel--) { document.frmSample.lstsel2.options[nDel] = null; } } function Clearsel3() { //現在のプルダウンCの個数分削除する for (nDel = document.frmSample.lstsel3.options.length -1; nDel >= 0 ; nDel--) { document.frmSample.lstsel3.options[nDel] = null; } } function CreateList2() { var nSelectval; Clearsel2(); Clearsel3(); nSelectval = document.frmSample.lstsel1.value; if (nSelectval == "ミカン") { Create(document.frmSample.lstsel2, strmikan); } if (nSelectval == "ブドウ") { Create(document.frmSample.lstsel2, strbudou); } if (nSelectval == "サクランボ") { Create(document.frmSample.lstsel2, strsakuranbo); } CreateList3(); } function CreateList3() { var nSelectval; Clearsel3(); nSelectval = document.frmSample.lstsel2.value; if (nSelectval == "温州") { Create(document.frmSample.lstsel3, strunsyu); } if (nSelectval == "甘夏") { Create(document.frmSample.lstsel3, stramanatu); } if (nSelectval == "八朔") { Create(document.frmSample.lstsel3, strhassaku); } if (nSelectval == "伊予柑") { Create(document.frmSample.lstsel3, striyokan); } if (nSelectval == "デラウェア") { Create(document.frmSample.lstsel3, strdela); } if (nSelectval == "巨峰") { Create(document.frmSample.lstsel3, strkyoho); } if (nSelectval == "マスカット") { Create(document.frmSample.lstsel3, strmascut); } if (nSelectval == "高砂") { Create(document.frmSample.lstsel3, strtakasago); } if (nSelectval == "佐藤錦") { Create(document.frmSample.lstsel3, strsatou); } if (nSelectval == "ナポレオン") { Create(document.frmSample.lstsel3, strhnapoleon); } } //この関数はIEのみです。NNを検討する場合はサンプル4-11をご覧ください。 function Create(objList, objArray) { var nMax = objArray.length; var nLoop = 0; for (nLoop = 0; nLoop < nMax; nLoop++) { var oAdd = document.createElement("OPTION"); oAdd.text = objArray[nLoop]; oAdd.value = objArray[nLoop]; objList.add(oAdd); } } //--> </script> </HEAD> <BODY text="#ff80c0" link="#ff80c0" vlink="#ff80c0" alink="#ff80c0" onLoad="CreateList()"> <center> <FORM name="frmSample"> 品名:<SELECT size="1" name="lstsel1" onChange="CreateList2()"></SELECT><BR> 銘柄:<SELECT size="1" name="lstsel2" onChange="CreateList3()"></SELECT><BR> 単価:<SELECT size="1" name="lstsel3" ></SELECT> </center> </BODY> </HTML>

kal1119
質問者

お礼

ありがとうございます。 サンプルを参考にセレクト4つで作成することができました。 本当に、感謝いたします。

その他の回答 (2)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

基本的には繰り返しになりますが、注意事項があります。 SELECT1 SELECT2 SELECT3 ミカン     温州      ¥300                 ¥310                 ¥320         甘夏      ¥350                 ¥360         八朔      ¥370                 ¥380 ブドウ     デラウェア   ¥400                 ¥410         巨峰      ¥450                 ¥460                 ¥470 サクランボ   佐藤錦     ¥500                 ¥510         高砂      ¥520                 ¥525         ナポレオン   ¥530                 ¥550 と言うように、上位の選択肢により、表示する内容・ 件数が変化しますので、表示データをTABLE化 すると、いいでしょうね。 また、上位の選択肢が変更された場合、最下層の選 択肢までを初期化することを忘れないでください。

kal1119
質問者

お礼

早速のご回答ありがとうございます。 しかし、JavaScript初心者なもので 大変申し訳ありませんが、 参考URLやサンプルのURLなどがありましたら 大変助かります。 よろしくお願いいたします。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

>セレクトメニューの選択項目に応じて、もう1つのセレクトメニューの内容を変更する方法は大体理解したのですが、 どう、理解されたのでしょうか? OnChangeで次のselectを初期化・オプション追加 ですよね。 ということは・・・・・・ 何がわからないのか、わかりません。

kal1119
質問者

補足

申し訳ありません、付け足します。 サンプルをもとに、こんな感じで作ってみました。 ---------------------------------------- <html> <head> <title>入力フォーム</title> <script language="JavaScript"><!-- menuItem = [[""],["---","TEST1","TEST2","TEST3"]]; function setMenuItem(n) {  len = document.myForm.Server.options.length;  for (i=0; i<len; i++)  {   document.myForm.Server.options[i] = null;  }  for (i=0; i<menuItem[n].length; i++)  {   document.myForm.Server.options[i] = new Option(menuItem[n][i],menuItem[n][i]);  } } // --></script> <script language="JavaScript"><!-- modelItem = [[""],["---","sjpx011","sjpx0112"],["---","tjpx232"]]; function setModelItem(n) {  len = document.myForm.Model.options.length;  for (i=0; i<len; i++)  {   document.myForm.Model.options[i] = null;  }  for (i=0; i<ModelItem[n].length; i++)  {   document.myForm.Model.options[i] = new Option(modelItem[n][i],modelItem[n][i]);  } } // --></script> </head> <body> <form name="myForm"> <select name="Test" onChange="setMenuItem(this.selectedIndex)"> <option value="">---</option> <option value="CASE1">CASE1</option> </select> <select name="Server" onChange="setModelItem(this.selectedIndex)"> <option value="">---</option> </select> <select name="Model"> <option value="">---</option> </select> <select name="Rev"> <option value="">---</option> </select> </form> </body> </html> ---------------------------------------- 現状ですと、 "Test"を選択→"Server"から選択→"Model" と言うのを "Test"→"Server"→"Model"→"Rev"をひも付かせたいのですが、これ以上の分岐がよくわかりません。 もう一つ同じよなスクリプトを記述するだけで良いのでしょうか? それか、もっとよい方法があるのでしょうか? 以上、よろしくお願いいたします。

関連するQ&A