[Javascript][jQuery] セレクトボックス メインカテゴリーとサブカテゴリーを連動させる
概要
select要素のセレクトボックスで階層化されたメインカテゴリーを選択すると
関連したサブカテゴリーに表示を連動させる。
①サブカテゴリーの初期表示は未選択状態を示すoption要素のみを表示
②メインカテゴリーで項目を選択する
③サブカテゴリーは連動した未選択状態項目と連動した項目のみが表示される
コード
■html
<div class="col-md-4"> <select id="maincategory" name="maincategory"> <option value="">----------------------------------</option> <option value="1">肉</option> <option value="2">野菜</option> <option value="3">魚</option> </select> </div> <div class="col-md-4"> <select id="subcategory" name="subcategory"> <option value="" data-category="">----------------------------------</option> <option value="a" data-category="1">牛</option> <option value="b" data-category="1">豚</option> <option value="c" data-category="1">鳥</option> <option value="aa" data-category="2">トマト</option> <option value="bb" data-category="2">キャベツ</option> <option value="cc" data-category="2">にんじん</option> <option value="aaa" data-category="3">マグロ</option> <option value="bbb" data-category="3">サーモン</option> <option value="ccc" data-category="3">サバ</option> </select> </div>
<script> document.addEventListener("DOMContentLoaded", function(){ // 初期値が設定されている場合は最上位を選択させない var firstChange = ($("#subcategory").val() == ""); $("#maincategory").on("change",function(){ if(firstChange){ // 最上位を選択(現在選択項目を解除) $("#subcategory option[value='']").prop('selected',true); } firstChange = true; $("#subcategory option").hide(); $("#subcategory option[data-category='']").show(); $("#subcategory option[data-category=" + this.value + "]").show(); }).change(); }); </script>
メインカテゴリーのvalueをカスタムデータ属性に設定して
一旦全部非表示にし、関連するoption要素のみを表示してます。
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
- 作者: Ethan Brown,武舎広幸,武舎るみ
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/01/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る