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

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

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

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

Q&A

解決済

1回答

1353閲覧

連動するセレクトボックスの組が1ページに複数存在する場合

gons

総合スコア11

JavaScript

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

0グッド

0クリップ

投稿2019/05/18 04:51

前提・実現したいこと

お世話になっております。
下記サイトを参考に、javascriptにて2つのセレクトボックスが連動しているものを作ろうと思っているのですが
プラグイン不要! jQueryで複数のセレクトボックスの選択肢を連動させる

ユーザの状態によって、その連動したセレクトボックスの組が、1ページ内に複数存在し、
今選択したセレクトボックスに紐付いたセレクトボックスだけしか変動させたくない場合、どのようにしたら良いでしょうか?

親セレクトボックス1を操作すると子セレクトボックス1が変化するが、その他のセレクトボックスには影響させない。

[親セレクトボックス1][子セレクトボックス1]
[親セレクトボックス2][子セレクトボックス2]
[親セレクトボックス3][子セレクトボックス3]
……

セレクトボックスの組はデータによって変動します。
htmlは動的に生成できるので、class名をparent1, parent2, children1, children2 と番号振っていくことは可能です。

何か方針やヒントでも、頂けたらと思います。よろしくお願い致します。

該当のソースコード

javascript

1var $children = $('.children'); //都道府県の要素を変数に入れます。 2var original = $children.html(); //後のイベントで、不要なoption要素を削除するため、オリジナルをとっておく 3 4//地方側のselect要素が変更になるとイベントが発生 5$('.parent').change(function() { 6 7 //選択された地方のvalueを取得し変数に入れる 8 var val1 = $(this).val(); 9 10 //削除された要素をもとに戻すため.html(original)を入れておく 11 $children.html(original).find('option').each(function() { 12 var val2 = $(this).data('val'); //data-valの値を取得 13 14 //valueと異なるdata-valを持つ要素を削除 15 if (val1 != val2) { 16 $(this).not(':first-child').remove(); 17 } 18 19 }); 20 21 //地方側のselect要素が未選択の場合、都道府県をdisabledにする 22 if ($(this).val() == "") { 23 $children.attr('disabled', 'disabled'); 24 } else { 25 $children.removeAttr('disabled'); 26 } 27 28});

HTML

1<select class="parent" name="foo"> 2 <option value="" selected="selected">地方を選択</option> 3 <option value="北海道・東北">北海道・東北</option> 4 <option value="関東">関東</option> 5 <option value="甲信越・北陸">甲信越・北陸</option> 6 <option value="東海">東海</option> 7 <option value="関西">関西</option> 8 <option value="中国">中国</option> 9 <option value="四国">四国</option> 10 <option value="九州・沖縄">九州・沖縄</option> 11</select> 12 13<select class="children" name="bar" disabled> 14 <option value="" selected="selected">都道府県を選択</option> 15 <option value="北海道" data-val="北海道・東北">北海道</option> 16 <option value="青森県" data-val="北海道・東北">青森県</option> 17 <option value="岩手県" data-val="北海道・東北">岩手県</option> 18 <option value="宮城県" data-val="北海道・東北">宮城県</option> 19 <option value="秋田県" data-val="北海道・東北">秋田県</option> 20 <option value="山形県" data-val="北海道・東北">山形県</option> 21 <option value="福島県" data-val="北海道・東北">福島県</option> 22 <option value="茨城県" data-val="関東">茨城県</option> 23 <option value="栃木県" data-val="関東">栃木県</option> 24 <option value="群馬県" data-val="関東">群馬県</option> 25 <option value="埼玉県" data-val="関東">埼玉県</option> 26 <option value="千葉県" data-val="関東">千葉県</option> 27 <option value="東京都" data-val="関東">東京都</option> 28 <option value="神奈川県" data-val="関東">神奈川県</option> 29 <option value="新潟県" data-val="甲信越・北陸">新潟県</option> 30 <option value="富山県" data-val="甲信越・北陸">富山県</option> 31 <option value="石川県" data-val="甲信越・北陸">石川県</option> 32 <option value="福井県" data-val="甲信越・北陸">福井県</option> 33 <option value="山梨県" data-val="甲信越・北陸">山梨県</option> 34 <option value="長野県" data-val="甲信越・北陸">長野県</option> 35 <option value="岐阜県" data-val="東海">岐阜県</option> 36 <option value="静岡県" data-val="東海">静岡県</option> 37 <option value="愛知県" data-val="東海">愛知県</option> 38 <option value="三重県" data-val="東海">三重県</option> 39 <option value="滋賀県" data-val="関西">滋賀県</option> 40 <option value="京都府" data-val="関西">京都府</option> 41 <option value="大阪府" data-val="関西">大阪府</option> 42 <option value="兵庫県" data-val="関西">兵庫県</option> 43 <option value="奈良県" data-val="関西">奈良県</option> 44 <option value="和歌山県" data-val="関西">和歌山県</option> 45 <option value="鳥取県" data-val="中国">鳥取県</option> 46 <option value="島根県" data-val="中国">島根県</option> 47 <option value="岡山県" data-val="中国">岡山県</option> 48 <option value="広島県" data-val="中国">広島県</option> 49 <option value="山口県" data-val="中国">山口県</option> 50 <option value="徳島県" data-val="四国">徳島県</option> 51 <option value="香川県" data-val="四国">香川県</option> 52 <option value="愛媛県" data-val="四国">愛媛県</option> 53 <option value="高知県" data-val="四国">高知県</option> 54 <option value="福岡県" data-val="九州・沖縄">福岡県</option> 55 <option value="佐賀県" data-val="九州・沖縄">佐賀県</option> 56 <option value="長崎県" data-val="九州・沖縄">長崎県</option> 57 <option value="熊本県" data-val="九州・沖縄">熊本県</option> 58 <option value="大分県" data-val="九州・沖縄">大分県</option> 59 <option value="宮崎県" data-val="九州・沖縄">宮崎県</option> 60 <option value="鹿児島県" data-val="九州・沖縄">鹿児島県</option> 61 <option value="沖縄県" data-val="九州・沖縄">沖縄県</option> 62</select>

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

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

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

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

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

guest

回答1

0

ベストアンサー

html

1<div class="pref_set"> 2 <select class="areas"></select> 3 <select class="prefectures"></select> 4</div> 5 6<div class="pref_set"> 7 <select class="areas"></select> 8 <select class="prefectures"></select> 9</div> 10 11<div class="pref_set"> 12 <select class="areas"></select> 13 <select class="prefectures"></select> 14</div>

こんな感じでグループ化しておけば、

javascript

1$(".areas").on('change', function(){ 2 let val = $(this).val(); 3 let prefectures = $(this).parents('.pref_set').find('.prefectures'); 4});

関連する.prefecturesが特定できるし、

html

1<select class="areas"></select> 2<select class="prefectures"></select> 3 4<select class="areas"></select> 5<select class="prefectures"></select> 6 7<select class="areas"></select> 8<select class="prefectures"></select>

こうなっていても

javascript

1$(".areas").on('change', function(){ 2 let val = $(this).val(); 3 let prefectures = $(this).after('.prefectures'); 4});

で特定できます。

投稿2019/05/18 05:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gons

2019/05/18 08:32

グループ化! ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問