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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

8369閲覧

連動プルダウン 選択した値によって表示を切り替えたい

mikiko

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/15 02:45

編集2020/05/15 06:23

質問させていただきます。
連動のプルダウンで、2つめのプルダンで選択した値を引き継ぎ、
表示が切り替わるようにしたいのですが、
どのようにソースをかけば良いかご教示いただけませんでしょうか。

ソースを書かせていただきます。

<form> <div class="pulldownset vegetable"> <select id="cate" class="subbox" > <option value="">種類を選択</option> <option value="ha">葉菜類</option> <option value="ne">根菜類</option> <option value="ka">果菜類</option> </select> <select id="ha" class="subbox2"> <option value="">葉菜類を選択</option> <option value="ha1">キャベツ</option> <option value="ha2">ほうれん草</option> <option value="ha3">レタス</option> <option value="ha4">セロリ</option> </select> <select id="ne" class="subbox2"> <option value="">根菜類を選択</option> <option value="ne1">大根</option> <option value="ne2">にんじん</option> <option value="ne3">ゴボウ</option> </select> <select id="ka" class="subbox2"> <option value="">果菜類を選択</option> <option value="ka1">キュウリ</option> <option value="ka2">カボチャ</option> <option value="ka3">トマト</option> </select> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> </div> </form> <!--<div id="ha1">キャベツを選択しました</div>  <div id="ha2">ほうれん草を選択しました</div>  <div id="ha3">レタスを選択しました</div>  <div id="ne1">大根を選択しました</div>  <div id="ne2">ニンジンを選択しました</div>  <div id="ne3">ゴボウを選択しました</div>  <div id="ka1">キュウリを選択しました</div>  <div id="ka2">カボチャを選択しました</div>  <div id="ka3">トマトを選択しました</div>--> <script type="text/javascript"> // HTMLの読み込み直後に実行: document.addEventListener('DOMContentLoaded', function() { // DOMContentLoaded内 // 2. 表示/非表示を一気に更新する(表示条件は、引数と一致する id のサブBOX) var dispSubBox = function(subId) { [...document.querySelectorAll(".subbox2")].forEach(function(elm){ elm.style.display = elm.id===subId ? "inline": "none" }); } dispSubBox(); // 一致する id がないので全て 非表示になる。 // 1. select.subbox の操作で値が変わると発火するイベント document.getElementById("cate").addEventListener("cange", function(event){ var elm = event.target; // select#id になる。 //console.log( elm.id ); // "cate" //console.log( elm.value ); // サブBOXに与えた id と同じ dispSubBox( elm.value ); // 全更新:一致idだけ表示 }); }); </script>

例えば、「キャベツ」と選んだら、option valueの「ha1」がdivのidになり
プルダウンで選択する内容によって切り替わるようにしたいです。

プルダウンが1つの時はできたのですが、2つになった時にうまくいかず、
教えていただけますと幸いです。
何卒、どうぞよろしくお願いいたします。

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

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

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

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

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

mikiko

2020/05/15 03:15

すいません。ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

イベントリスナは受け取った引数から、操作された要素を取得できます。

<form> 内の4つの <select> のうち

  1. 最初の<select> が変化すると、サブBOXの id を value から得るイベントを考える。
  2. サブBOX(他の<select>)の表示/非表示処理は 指定id だけが表示されるような全更新を ユーザ関数 で実装する。

ご質問のHTMLにおいて、イベント定義しやすくするため select.subboxid="cate" を追加した場合、以下のように実装できます。

javascript

1 2// DOMContentLoaded内 3 4 // 2. 表示/非表示を一気に更新する(表示条件は、引数と一致する id のサブBOX) 5 var dispSubBox = function(subId) { 6 [...document.querySelectorAll(".subbox2")].forEach(function(elm){ 7 elm.style.display = elm.id===subId ? "inline": "none" 8 }); 9 } 10 dispSubBox(); // 一致する id がないので全て 非表示になる。 11 12 // 1. select.subbox の操作で値が変わると発火するイベント 13//document.getElementById("cate").addEventListener("cange", function(event){ 14 document.getElementById("cate").addEventListener("change", function(event){ 15 var elm = event.target; // select#id になる。 16 //console.log( elm.id ); // "cate" 17 //console.log( elm.value ); // サブBOXに与えた id と同じ 18 dispSubBox( elm.value ); // 全更新:一致idだけ表示 19 }); 20 21

MDN

投稿2020/05/15 05:36

編集2020/05/15 06:31
AkitoshiManabe

総合スコア5432

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

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

mikiko

2020/05/15 05:59

丁寧にご回答いただき、ありがとうございます。 私の理解が足らずすみません。 ●formの中の一つ目のselectは次のようになるということですね。 <select class="subbox" id="cate"> ●また、JavaScriptは、下記の中に、教えていただいたソースのみを記述するということでしょうか? document.addEventListener('DOMContentLoaded', function() { }); </script> JavaScriptがよくわかっておらず、すみません。 ご教示いただけますと幸いです。
AkitoshiManabe

2020/05/15 06:04

●2点については、そのとおりです。 > JavaScriptがよくわかっておらず コード内にMDNのページを示していますので、参考にしてみてください。
mikiko

2020/05/15 06:24

ありがとうございます。ソースを上書きしたのですが、うまくいっておりません。私の方で間違っていると思うのですが、ご覧いただけないでしょうか。
AkitoshiManabe

2020/05/15 06:31

回答にタイプミスがありましたので訂正します。 (イベントタイプ change と書くべき箇所を cange となっていました)
mikiko

2020/05/15 06:45

ありがとうございます。直しまして、動きました。 あとひとつお聞きしたいのですが、例えば「キャベツ」を選んだとき、<div id="ha"></div>と表示させたいのですが、今のソースからどのように書き足せば良いでしょうか。何度も申し訳ありません。
AkitoshiManabe

2020/05/15 06:58

今回の応用ですね。select#ha にイベント定義して、event.target.value で切り分ける。現状、<!-- --> でコメント内の div について全更新をかける。今回の処理を一つ一つを理解することが大事ですので、リファレンスを何度も読み返し、理解を深めながら挑戦してみてください。
mikiko

2020/05/16 05:54

うまくいきました。この度はありがとうございました!
guest

0

JavaScript

1var mainSelect = mainBoxes[i].getElementsByClassName("mainselect"); 2mainSelect[0].onchange = function () { 3}

上記のようにクラス「mainselect」を変更した時にしか実行されません。
よってキャベツの属するクラス「subbox」を変更してもなにもイベントが発火しません。

簡単に考えるなら、クラス「mainselect」のコードをそのままクラス「subbox」に置き換えて、
3階層目のselectをクラス「subbox2」などで作ってしまうのはいかがでしょう。

投稿2020/05/15 03:05

編集2020/05/15 03:20
rjunakc

総合スコア368

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

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

mikiko

2020/05/15 04:12

ソースを修正いたしましたが、いかがでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問