前提・実現したいこと
selectボックスを二つ用意し、1つ目の選択肢によって2つ目の選択肢が自動的に切り替わるようにしたいです。
かつ、2つ目の選択肢の項目が1つなら、自動的に表示されるようにしたいです。
例えば、下記のソースで言うと、
県の選択で、[北海道]を選ぶと、市の選択は[札幌市]と[釧路市]なので、市のセレクトボックスの初期表示は、[-- 選択--]。[青森]の場合は、[青森市]だけなので、初期表示が[青森市]となるようにしたいです。
選択肢が切り替わるようには下記サイトを参考にしました。
https://try-m.co.jp/blog/web-create/936/
試したこと
eachでインデックスされている数が1つだったら
valueの値を変えるという考えでできるのかなと思うのですが、
その書き方がわかりません…。
お手数ですが、よろしくお願いいたします。
該当のソースコード
html
1<select class="parent"> 2 <option value="" selected="selected" label="-- 選択 --">-- 選択--</option> 3 <option value="北海道">北海道</option> 4 <option value="青森">青森</option> 5 <option value="岩手">岩手</option> 6</select> 7 8<select class="child" disabled> 9 <option value="" label="-- 選択2 --" selected="selected">-- 選択2 --</option> 10 <option value="01" data-val="北海道">札幌市</option> 11 <option value="02" data-val="北海道">釧路市</option> 12 <option value="03" data-val="青森">青森市</option> 13 <option value="04" data-val="岩手">盛岡市</option> 14</select> 15 16 17
jQuery
1 2$(function() { 3var $children = $('.child'); //市の要素を変数に入れます。 4var original = $children.html(); //後のイベントで、不要なoption要素を削除するため、オリジナルをとっておく 5 6$('.parent').change(function() { 7 //選択された都道府県のvalueを取得し変数に入れる 8 var val1 = $(this).val(); 9 //削除された要素をもとに戻すため.html(original)を入れておく 10 $children.html(original).find('option').each(function(i, val) { 11 var val2 = $(this).data('val'); //data-valの値を取得 12 //valueと異なるdata-valを持つ要素を削除 13 if (val1 != val2) { 14 $(this).not(':first-child').remove(); 15 } 16//?インデックスされた数が1の場合は、valueの値をいれる? 17 if (i == 1) { 18 var val3 = val2.val(); 19 $('.pairc').val(val3); 20 } 21 }); 22 //地方側のselect要素が未選択の場合、都道府県をdisabledにする 23 if ($(this).val() == "") { 24 $children.attr('disabled', 'disabled'); 25 } else { 26 $children.removeAttr('disabled'); 27 } 28 });
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 15:11
2018/07/30 23:57 編集
2018/07/31 04:18