前提・実現したいこと
個人でアプリケーションの作成を行っています。
JavaScript初学者で拙い文章・コードですが、よろしくお願いします。
(例)
「肉」を選択した場合、
=> 選択肢は「豚肉」「牛肉」「羊肉」の3つ
「魚」を選択した場合、
=> 選択肢は、「マグロ」「ハマチ」「アジ」の3つ
上記のように、始めの選択肢次第で以降の選択肢の内容が異なる挙動を目指しています。
どのような手段を用いればプルダウン内の選択肢は制限できるのでしょうか?
困っているので、教えていただけると幸いです、些細なヒントでもありがたいです。
【実現したいこと】
プルダウンで、選択された値によって以降の選択肢を変更させたい。
発生している問題・エラーメッセージ
選択肢の変更方法が分かりません。
該当のソースコード
HTML
1 2<div class="field_with_errors"><select class="select1" id="item-category" name="item[category_id]"> 3 <option selected="selected" value="1">--</option> 4 <option value="2">肉</option> 5 <option value="3">魚/option> 6 (略) 7 </select></div> 8 9<div class="field_with_errors"><select class="select2 hidden1" id="item-food" name="item[food_id]"> 10 <option selected="selected" value="1">--</option> 11 <option value="2">豚肉</option> 12 <option value="3">牛肉</option> 13 <option value="4">マグロ</option> 14 (略) 15 </select></div> 16 17
JavaScript
1 2 3 window.addEventListener('load', function(){ 4 const itemC = document.querySelectorAll("name[item=category_id]") 5 const itemF = document.querySelectorAll("name[item=food_id]"); 6 const itemCategory = document.getElementById("item-category"); 7 const itemFood = document.getElementById("item-food"); 8 9 10 //カテゴリーを選択しないとfoodの入力フォームが入力できないようにする 11 itemCategory.addEventListener('input', function(){ 12 if (itemFood.getAttribute("style") == "display:block;" || itemCategory.value == 1) { 13 itemFood.removeAttribute("style", "display:block;"); 14 } else { 15 itemFood.setAttribute("style", "display:inline-block;"); 16 } 17 }); 18 const itemCategoryValue = itemCategory.value 19 const itemFoodValue = itemFood.value 20 21 //カテゴリーで肉を選択した際には、「豚肉」「牛肉」しか選択肢にないようにする 22 //console.log(itemCategoryValue) =>カテゴリーIDの取得済 23 24 //foodの入力フォームをクリックした際の処理+カテゴリーで「肉」を選択した際の処理 25 itemFood.addEventListener('click', function(){ 26 if (itemCategory.value == 2) { 27 console.log(itemF); =>nodeListで取得する 28 console.log(itemFood); =>全てのselect要素取得する 29 } else { 30 console.log("×"); 31 } 32 }); 33 });
CSS
1 2 .hidden1{ 3 display: none; 4} 5 6
試したこと
nodeListについて、勉強しました。
https://developer.mozilla.org/ja/docs/Web/API/NodeList
今回は、nodeListで取得した後に、配列に置き換えて
foreach()メソッドを用いて反復させるのがいいのかなと読んでみて思いました。
しかしながら、反復したとしても何をすれば、選択肢から外すにはselect要素に
何を定義すればいいのか分かりません。
些細なヒントでもいただけると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/20 00:01
2020/11/20 04:40
2020/11/20 06:10
2020/11/20 07:04
2020/11/20 07:23