質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

4694閲覧

javascriptで三段階の絞り込み検索をやりたい。

sembokulove

総合スコア76

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2019/01/12 05:33

編集2019/01/12 05:52

自分はプルダウンのjavascriptで絞り込み検索というものをやっております。2段階の絞り込み検索には成功しましたが、3段階の絞り込み検索はどうやればできるのでしょうか。たとえば食べ物を選択すると果物か野菜か肉類が出て、果物を選択するとリンゴやミカンやイチゴが出てくるモノを作りたいです。
以下はソースです。

<script type = "text/javascript"> <!-- function functionName() { var select1 = document.forms.formName.selectName1; //変数select1を宣言 var select2 = document.forms.formName.selectName2; //変数select2を宣言 select2.options.length = 0; // 選択肢の数がそれぞれに異なる場合、これが重要 if (select1.options[select1.selectedIndex].value == "大阪府") { select2.options[0] = new Option("堺市堺区"); select2.options[1] = new Option("堺市中区"); select2.options[2] = new Option("堺市東区"); select2.options[3] = new Option("堺市西区"); select2.options[4] = new Option("堺市南区"); select2.options[5] = new Option("堺市北区") select2.options[6] = new Option("堺市美原区"); select2.options[7] = new Option("和泉市"); } else if (select1.options[select1.selectedIndex].value == "兵庫県") { select2.options[0] = new Option("神戸市東灘区"); select2.options[1] = new Option("神戸市灘区"); select2.options[2] = new Option("堺市中央区"); select2.options[3] = new Option("神戸市兵庫区"); select2.options[4] = new Option("神戸市長田区"); select2.options[5] = new Option("神戸市須磨区"); select2.options[6] = new Option("神戸市市垂水区"); select2.options[7] = new Option("神戸市北区"); select2.options[8] = new Option("神戸市市西区"); select2.options[9] = new Option("尼崎市"); select2.options[10] = new Option("西宮市"); select2.options[11] = new Option("芦屋市"); select2.options[12] = new Option("伊丹市"); select2.options[13] = new Option("川西市"); select2.options[14] = new Option("宝塚市"); select2.options[15] = new Option("猪名川町"); select2.options[16] = new Option("三田市"); } else if (select1.options[select1.selectedIndex].value == "奈良県") { select2.options[0] = new Option("奈良市"); select2.options[1] = new Option("生駒市"); select2.options[2] = new Option("平群町"); select2.options[3] = new Option("三郷町"); select2.options[4] = new Option("王寺町"); select2.options[5] = new Option("神戸市須磨区"); select2.options[6] = new Option("神戸市市垂水区"); select2.options[7] = new Option("神戸市北区"); select2.options[8] = new Option("神戸市市西区"); select2.options[9] = new Option("尼崎市"); select2.options[10] = new Option("西宮市"); select2.options[11] = new Option("芦屋市"); select2.options[12] = new Option("伊丹市"); select2.options[13] = new Option("川西市"); select2.options[14] = new Option("宝塚市"); select2.options[15] = new Option("猪名川町"); select2.options[16] = new Option("三田市"); } else if (select1.options[select1.selectedIndex].value == "京都府") { select2.options[0] = new Option("京都市下京区"); select2.options[1] = new Option("京都市中京区"); select2.options[2] = new Option("京都市上京区"); select2.options[3] = new Option("京都市右京区"); select2.options[4] = new Option("京都市西京区"); select2.options[5] = new Option("京都市東山区"); select2.options[6] = new Option("京都市左京区"); select2.options[7] = new Option("京都市山科区"); select2.options[8] = new Option("京都市南区"); select2.options[9] = new Option("京都市伏見区"); select2.options[10] = new Option("宇治市"); select2.options[11] = new Option("亀岡市"); select2.options[12] = new Option("南丹市"); select2.options[13] = new Option("船井郡京丹波町"); select2.options[14] = new Option("福知山市"); select2.options[15] = new Option("綾部市"); select2.options[16] = new Option("舞鶴市"); select2.options[17] = new Option("宮津市"); } else if (select1.options[select1.selectedIndex].value == "肉類") { select2.options[0] = new Option("豚肉"); select2.options[1] = new Option("牛肉"); } } //--> </script> <body bgcolor onLoad="functionName()"> <form name="formName" method="post" action="./pathToProgramFile"> <!--選択肢その1--> <select name = "selectName1" onChange="functionName()"> <option value = "選択されていません">選択されていません</option> <option value = "大阪府">大阪府</option> <option value = "兵庫県">兵庫県</option> <option value = "奈良県">奈良県</option> <option value = "京都府">京都府</option> <option value = "肉類">にくるい</option> </select> <!--選択肢その2(選択肢その1の項目によって変化)--> <select name = "selectName2"> </select> </body>
bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/12 06:16

二段ができて三段ができない理由がわからないですね。 そろそろマークダウンでコード提示いただけませんか?でないと正しく再現確認できないんですよね。 質問読む気を削ぐコードの提示の仕方です。 まともな回答要らないてなら別にこのままでもいいですけど、ほとんどの質問未解決のまま進まれるのは荒らし行為と同等です。やめてください。
guest

回答1

0

長いので省略して大阪府だけ3段階目まで選べるようにしました。

HTML

1<script type = "text/javascript"> 2function functionName() { 3 var select1 = document.forms.formName.selectName1; //変数select1を宣言 4 var select2 = document.forms.formName.selectName2; //変数select2を宣言 5 var select3 = document.forms.formName.selectName3; //変数select3を宣言 6 7 select3.options.length = 0; 8 9 if (select2.selectedIndex < 0) { 10 select2.options.length = 0; 11 if (select1.options[select1.selectedIndex].value == "大阪府") 12 { 13 select2.options[0] = new Option("堺市堺区"); 14 select2.options[1] = new Option("堺市中区"); 15 } 16 17 else if (select1.options[select1.selectedIndex].value == "兵庫県") 18 { 19 select2.options[0] = new Option("神戸市東灘区"); 20 select2.options[1] = new Option("神戸市灘区"); 21 select2.options[2] = new Option("堺市中央区"); 22 } 23 else if (select1.options[select1.selectedIndex].value == "奈良県") 24 { 25 select2.options[0] = new Option("奈良市"); 26 select2.options[1] = new Option("生駒市"); 27 } 28 else if (select1.options[select1.selectedIndex].value == "京都府") 29 { 30 select2.options[0] = new Option("下京区"); 31 select2.options[1] = new Option("中京区"); 32 select2.options[2] = new Option("上京区"); 33 } 34 else if (select1.options[select1.selectedIndex].value == "肉類") 35 { 36 select2.options[0] = new Option("豚肉"); 37 select2.options[1] = new Option("牛肉"); 38 } 39 } else { 40 41 if (select2.options[select2.selectedIndex].value == "堺市堺区") 42 { 43 select3.options[0] = new Option("堺市堺区A"); 44 select3.options[1] = new Option("堺市堺区B"); 45 } else if (select2.options[select2.selectedIndex].value == "堺市中区") 46 { 47 select3.options[0] = new Option("堺市中区A"); 48 select3.options[1] = new Option("堺市中区B"); 49 } 50 } 51} 52</script> 53 54<body bgcolor onLoad="functionName()"> 55 <form name="formName" method="post" action="./pathToProgramFile"> 56 <!--選択肢その1--> 57 <select name = "selectName1" onChange="functionName()"> 58 <option value = "選択されていません">選択されていません</option> 59 <option value = "大阪府">大阪府</option> 60 <option value = "兵庫県">兵庫県</option> 61 <option value = "奈良県">奈良県</option> 62 <option value = "京都府">京都府</option> 63 <option value = "肉類">にくるい</option> 64 </select> 65 66 <!--選択肢その2(選択肢その1の項目によって変化)--> 67 <select name = "selectName2" onChange="functionName()"> 68 </select> 69 <select name = "selectName3" > 70 </select> 71 </form> 72</body>

大分質問文も良くなったと思いますが、mts10806さんやほかの質問でも指摘されている通りコードは「```」でくくって、上記のように見やすくしないと回答が来づらいです。
コードを載せられたのも素晴らしいですが、これではまだ「3段階目の検索機能を作ってくれ」という丸投げの依頼にしか見ません。「3段階目を作るためにこういうコードを書いたけど、こういうエラーが出て動かなかった。どうすればいいですか」となって初めて質問になってるといえると思います。

私の記載したコードはsembokuloveさんの書かれたコードの多くの課題が残ったままになっていると思います。
4段階目はどうするのか、冗長な箇所が無いか、選択肢の追加や更新が大変じゃないか、などなど
質問文からはこれ以上の仕様は読み取れず私の力では解決できなかったため、ここからの改良はsembokuloveさんが頑張っていただければと思います。

また、未解決のままほったらかしにしてる質問も解決したのであれば自己解決方法を記入し、同じ質問を繰り返してしまったのであれば削除依頼をだすなりしたほうがいいと思います。

投稿2019/01/12 08:30

編集2019/01/12 09:09
koronatail

総合スコア433

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問