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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

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

Q&A

解決済

2回答

2605閲覧

セレクトボックスの値を変更すると、別のセレクトボックスの項目が自動で切り替わるjQuery

Tsubanishi

総合スコア43

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

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

0グッド

0クリップ

投稿2020/11/23 11:59

編集2020/11/24 01:19

wordpressの問い合わせホームにて、セレクトボックスの値を変更すると、別のセレクトボックスの項目が自動で切り替わるjQueryプラグインを探しています。
下記ページのDependent Selectsというプラグインが、セレクトボックスの値を変更すると別のセレクトボックスが現れ、項目が自動で切り替えるものがいくつも作れると思ったのですが、 CDNに対応しておらず、サーバーからファイルを引っ張ってくる必要があります。 できれば、あまりサーバー内にファイルを置きたくないので、CDNを使用して引っ張ってこれるjqueryプラグイン をどなたか知らないでしょうか?

こちらがやりたい事ができるプラグイン です。
https://fit-jp.com/selectbox-jq/
やりたいこととして
1 バス利用の有り、無しをselectboxで選択→有りの場合はバスルートとselectboxがあらわれる。無しの場合はバスルートのselectboxはあらわれない

2バス利用有りを選択した場合に次のバスルートを選択→1ルートの場合は1ルートのバス停の書いてあるselectboxがあらわれる。2ルートの場合は2ルートのバス停の書いてあるselectboxがあらわれる
↑↑↑
2の部分は下記コードで作成してみたのですが、初めからバスルートと停留所2つのバスルートのselectboxがでたままになっています。

現在jqueryなしで作成したのですが、selectboxを2つまではわかったのですが3つ4つに増やすやり方が
わからないのと、1つ目のselectboxを選択したら次のセレクトboxがでるみたいにしたいのですが
そのやり方がわからずプラグインを使用しようと思っておりました
現在のコードは下記です

html

1<select class="form-control" name="バスルート(バス希望の方のみ)"> 2 <option value="" selected="selected">選択してください</option> 3 <option value="①ルート">①ルート</option> 4 <option value="②ルート">②ルート</option> 5</select> 6 7<select class="children" name="bar" disabled=""> 8 <option value="" selected="selected">選択してください</option> 9 <option value="3丁目交差点先" data-val="①ルート">3丁目交差点先</option> 10 <option value="ポルシェ前" data-val="①ルート">ポルシェ前</option> 11 <option value="南郵便局前" data-val="①ルート">南郵便局前</option> 12 <option value="サミット前" data-val="②ルート">サミット前</option> 13 <option value="交差点手前" data-val="②ルート">交差点手前</option> 14 <option value="神社前" data-val="②ルート">神社前</option> 15</select>

javascript

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

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

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

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

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

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

yambejp

2020/11/24 00:21 編集

jQuery本体を除きライブラリを利用しないで自前で作るという選択肢はありますか? またどういうデータからどういうセレクトボックをどう連携したいのかわかりません
Tsubanishi

2020/11/24 01:20

自前でできるところまで作成しております。 ご確認お願いします
guest

回答2

0

ベストアンサー

多少htmlもいじりますが、以下のようなものでどうでしょう。

html

1<select class="form-control" name="バスルート(バス希望の方のみ)" data-child="#1"> 2 <option value="" selected="selected">選択してください</option> 3 <option value="①ルート">①ルート</option> 4 <option value="②ルート">②ルート</option> 5</select> 6 7<select class="form-control children" id="1" name="bar" data-child="#2"> 8 <option value="" selected="selected">選択してください</option> 9 <option value="3丁目交差点先" data-val="①ルート">3丁目交差点先</option> 10 <option value="ポルシェ前" data-val="①ルート">ポルシェ前</option> 11 <option value="南郵便局前" data-val="①ルート">南郵便局前</option> 12 <option value="サミット前" data-val="②ルート">サミット前</option> 13 <option value="交差点手前" data-val="②ルート">交差点手前</option> 14 <option value="神社前" data-val="②ルート">神社前</option> 15</select> 16 17<select class="form-control children" id="2" name="foo"> 18 <option value="" selected="selected">選択してください</option> 19 <option value="a" data-val="3丁目交差点先">a</option> 20 <option value="b" data-val="3丁目交差点先">b</option> 21 <option value="c" data-val="ポルシェ前">c</option> 22 <option value="d" data-val="ポルシェ前">d</option> 23 <option value="e" data-val="南郵便局前">e</option> 24 <option value="f" data-val="サミット前">f</option> 25</select>

css

1.children { display: none; }

jQuery

1$('.form-control').on('change', function(){ 2 let $this = $(this), 3 child = $this.data('child'), 4 val = $this.val(); 5 6 if (val) { 7 let op_cnt = 0; 8 $(child).find('option').each(function(){ 9 let op = $(this); 10 if ( ! op.data('val') || op.data('val') == val) { 11 if (op.closest('span.hide').length) { 12 op.unwrap(); 13 } 14 15 if (op.data('val') == val) { 16 op_cnt ++; 17 } 18 } else { 19 if ( ! op.closest('span.hide').length) { 20 op.wrap('<span class="hide">'); 21 } 22 } 23 }); 24 25 if (op_cnt) { 26 $(child).show(); 27 } else { 28 $(child).val('').hide().change(); 29 } 30 } else { 31 $(child).val('').hide().change(); 32 } 33});

追記:
iOSでoptiondisplay:none;が効かないため、spanで囲むという方法に変えました。

投稿2020/11/24 10:59

編集2020/11/24 15:29
cerfweb

総合スコア1899

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

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

Tsubanishi

2020/11/24 15:02

できたのですが、なぜかスマホで操作するとselectbox1で①ルートを選択するとselectbox2では全ての項目が見れるようになってしまいました。selectbox3も同様です>pcだとselectbox1で①ルートを選択するとselectbox2では1で指定したルート内の停留所しか出てこないです こんな事有りますでしょうか?携帯はiphone seを使用、PCはmacbook air11in chiのものを使用しています
cerfweb

2020/11/24 15:32

私も知りませんでしたが、どうやらiOSではoptionにdisplay:none;が効かないようです。調べたところspanでwrapすると隠せることがわかりましたので、そのようにコードを変更しました。
Tsubanishi

2020/11/25 00:12

とても勉強になりました。 iOSで変わるとは知りませんでした 有難う御座いました
guest

0

要件が満たせているかわかりませんが、optionはshow/hideで制御すれば簡単だと思います。

js

1 $('.form-control').change(function() { 2 var val1 = $(this).val(); 3 $('.children').prop('disabled', !val1); 4 5 var options = $('.children > option'); 6 options.hide() 7 .filter('[value=""],[data-val="' + val1 + '"]').show() 8 .filter(':first').prop('selected', true); 9 });

投稿2020/11/24 03:30

plasticgrammer

総合スコア629

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問