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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

10315閲覧

2つのselectボックスを連動させ、2つ目の選択しが1つなら自動的に表示させたい

suni

総合スコア9

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/07/30 13:23

編集2018/07/30 14:00

前提・実現したいこと

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 });

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

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

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

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

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

guest

回答2

0

ベストアンサー

少しだけ改善しました。

js

1 2var $children = $('.parent'); //都道府県の要素を変数に入れます。 3var options = $('.child').find("option"); 4 5 6$('.parent').change(function() { 7 8 //市セレクトの初期化 9 $.each(options,function(index,value){ 10 $(value).removeAttr("selected"); 11 if($(value).data("val") == "default"){ 12 $(value).attr("selected","selected"); 13 } 14 $(value).show(); 15 }); 16 17 //選択された地方のvalueを取得し変数に入れる 18 var val1 = $(this).val(); 19 20 //市選択肢カウンタ 21 var option_count = 0; 22 //市選択肢が1つだったとき用の保存変数 23 var option_select = ""; 24 25 //市選択肢の表示切り替え 26 $.each(options,function(index,value){ 27 var city_option = $(value); 28 if(city_option.data("val") == "default"){ 29 //初期値選択肢用(-- 選択2 --) 30 city_option.attr("selected","selected"); 31 }else if(city_option.data("val") == val1){ 32 //選択された県に当てはまる場合はカウントを増やし、option_selectに格納 33 option_count++; 34 option_select = city_option; 35 }else{ 36 //選択された県にあてはまらない場合は、隠す 37 city_option.hide(); 38 } 39 }); 40 41 //市の選択肢が1つしかない場合は、自動的に選択された状態に変更 42 if(option_count == 1){ 43 option_select.attr("selected","selected"); 44 } 45 46 //市セレクトを選択可能に 47 $('.child').prop("disabled", false); 48 49 }); 50 51 52

動作確認は以下で
動作確認

  • 市選択肢の制御ロジックの改善(if -> else if)
  • 初期化の中でselectedz要素を削除するように変更

投稿2018/07/30 14:21

Spade

総合スコア115

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

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

suni

2018/07/30 15:11

ありがとうございます! 動作確認先、確認させていただきました。実現したい動作の通りとなっております。 こちら参考にさせていただきます! ソース一つ一つ確認して何をしているか把握していきたいと思います。
Spade

2018/07/30 23:57 編集

ぱっとソースだけ出しちゃってごめんなさい! 簡単な流れは 県セレクトチェンジイベント ↓ 市セレクト初期化 ↓ 選択した県に合致する市以外をhiddenに、合致した場合はカウンタを1増やしてoption要素を変数に格納↓ カウンタが1のとき(市の選択肢が一つのとき)変数に保持している市にselected属性を付与 という流れです。 選択された状態にする方法はいくつかありますが、今回はattrを使った方法にしました。 参考になれば幸いです!!
suni

2018/07/31 04:18

いえ!とんでもないです! 流れもご教示いただきありがとうございます!
guest

0

こんばんは!

ソースを見たのですが、都道府県のリストを選ぶと、市のリストが変化するという認識ですよね??
であれば、とりあえず取得すべきイベントは

js

1$('.child').change

ではなく

js

1$('.parent').change

ではないでしょうか??
もしかして僕の認識間違いでしょうか・・・!?

内容かくにんありがとうございました!

簡単に実装してみたのですが、以下のソースはどうでしょうか?
(ざざっと書いたので、わかりにくくてごめんなさい・・・)

js

1var $children = $('.parent'); //都道府県の要素を変数に入れます。 2var options = $('.child').find("option"); 3 4 5$('.parent').change(function() { 6 7 //市セレクトの初期化 8 $.each(options,function(index,value){ 9 if($(value).data("val") == "default"){ 10 $(value).attr("selected","selected"); 11 } 12 $(value).show(); 13 }); 14 15 //選択された地方のvalueを取得し変数に入れる 16 var val1 = $(this).val(); 17 18 //市選択肢カウンタ 19 var option_count = 0; 20 //市選択肢が1つだったとき用の保存変数 21 var option_select = "" 22 23 //市選択肢の表示切り替え 24 $.each(options,function(index,value){ 25 var city_option = $(value); 26 if(city_option.data("val") == "default"){ 27 //初期値選択肢用(-- 選択2 --) 28 city_option.attr("selected","selected"); 29 } 30 if(city_option.data("val") == val1){ 31 //選択された県に当てはまる場合はカウントを増やし、option_selectに格納 32 option_count++; 33 option_select = city_option; 34 }else{ 35 //選択された県にあてはまらない場合は、隠す 36 city_option.hide(); 37 } 38 }); 39 40 //市の選択肢が1つしかない場合は、自動的に選択された状態に変更 41 if(option_count == 1){ 42 option_select.attr("selected","selected"); 43 } 44 45 //市セレクトを選択可能に 46 $('.child').prop("disabled", false); 47 48 });

選択肢の増やす減らすはhideshowで実装してみました。
DOMを消してしまうと、初期化が面倒なので・・・

いかがでしょうか??
ここで動作確認できますよ!
動作確認(jsfiddle)

投稿2018/07/30 13:38

編集2018/07/30 14:08
Spade

総合スコア115

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

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

suni

2018/07/30 13:52

こんばんは 早速ありがとうございます! ご指摘の通り、都道府県のリストを選ぶと市のリストが変化する形です…! そもそも取得する部分が違ってますね…失礼しました。こちら質問内容修正しました。 ローカルで作成しているコードも修正して試してみます
Spade

2018/07/30 14:03

やはりそうですよね!簡単に実装してみたので少々おまちください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問