###やりたいこと
プルダウンが2つあり、「エリア」プルダウンの選択肢によって「アトラクション」プルダウン選択肢が絞られるような機能を実装しています。
プルダウンの「----選択してください」および「----エリアを選択してください」にJavaScriptを使ってdisable属性を付加したいのですが、下記「画像付き説明②」に記載のコードを付与したところアトラクションの選択肢絞り込みが解除されてしまいます。
「----選択してください」を非活性にした後も変わらず絞り込みを行うようにしたいのですが原因が分からず、お手数ですがコードレビューいただけますと幸いです。
よろしくお願い致します。
なお、JSを使わず、HTMLのoptionタグに直接disableを追記するという方法は考えておりません。
飽くまでJSを用いたdisableの追加方法についてご教示頂けますと幸いです。
###画像付き説明
①エリアが「----選択してください」の時、アトラクションは「----エリアを選択してください」だけに絞り込まれている。
②しかし、下記JSコードを加えたところ、指定した選択肢は非活性になるが、アトラクションの絞り込みが解除される。
JavaScript
1 document.getElementById('id_area').options[0].disabled=true; 2 document.getElementById('id_attraction').options[0].disabled=true;
③ただし、指定したoption以外の選択肢については絞り込み機能が変わらず有効です。
###各種コード
必要と思う部分のみ記載しております。
情報に不足ありましたらご指摘いただけますと幸いです。
HTML
1<div> 2 <h2 class="ttl-bd mt-4 mb-4">投稿情報</h2> 3</div> 4 5<form method="post" enctype="multipart/form-data"> 6 {% csrf_token %} 7 <div class="formpost"> 8 <div>エリア<span>※必須</span></div> 9 <select name="area" class="form-control" id="id_area"> 10 <option value="----選択してください">----選択してください</option> 11 <option value="選択肢A">選択肢A</option> 12 <option value="選択肢B">選択肢B</option> 13 </select> 14 </div> 15 <div class="formpost"> 16 <div>アトラクション<span>※必須</span></div> 17 <select name="attraction" class="form-control" id="id_attraction"> 18 <option value="----エリアを選択してください">----エリアを選択してください</option> 19 <option value="選択肢a">選択肢a</option> 20 <option value="選択肢b">選択肢b</option> 21 <option value="選択肢c">選択肢c</option> 22 <option value="選択肢d">選択肢d</option> 23 </select> 24 </div> 25</form>
JavaScript
1<script> 2 document.getElementById('id_area').options[0].disabled=true; 3 document.getElementById('id_attraction').options[0].disabled=true; 4 const areaElement = $('#id_area'); 5 const attractionElement = $('#id_attraction'); 6 const area_attraction = { 7 '----選択してください': [ 8 { 9 'value': '----エリアを選択してください', 10 'name': '----エリアを選択してください' 11 }, 12 ], 13 '選択肢A': [ 14 { 15 'value': '選択肢a', 16 'name': '選択肢a' 17 }, 18 { 19 'value': '選択肢b', 20 'name': '選択肢b' 21 }, 22 ], 23 '選択肢B': [ 24 { 25 'value': '選択肢c', 26 'name': '選択肢c' 27 }, 28 { 29 'value': '選択肢d', 30 'name': '選択肢d' 31 }, 32 ], 33 }; 34 const changeArea = (select) => { 35 attractionElement.children().remove(); 36 const parentId = areaElement.val(); 37 const categoryList = area_attraction[parentId]; 38 for (const category of categoryList) { 39 const option = $('<option>'); 40 option.val(category['value']); 41 option.text(category['name']); 42 attractionElement.append(option); 43 } 44 if (select !== undefined) { 45 attractionElement.val(select); 46 } 47 }; 48 $('#id_area').on('change', () => { 49 changeArea(); 50 }); 51 if (areaElement.val()) { 52 const selectedCategory = attractionElement.val(); 53 changeArea(selectedCategory); 54 }
###開発環境
HTML5
Bootstrap 4.7.0
Django 2.2.16
jQuery 3.5.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/28 00:24