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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

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

JavaScript

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

jQuery

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

Q&A

解決済

1回答

801閲覧

(jQuery, JavaScript)プルダウンに初期値「選択してください」を入れたい

minari766

総合スコア17

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/07/25 22:27

編集2021/07/26 15:59

##やりたいこと
プルダウン(エリア)とプルダウン(アトラクション)があります。
プルダウン(エリア)の選択肢によりプルダウン(アトラクション)の選択肢が自動的に決まるという機能にしているのですが、プルダウン(アトラクション)の初期状態がブランクになってしまっているため、「エリアを選択してください」という一文を初期表示したいです。

現状↓
イメージ説明

JS上にattractionElement.children().remove();と入れてしまっているため、アトラクションがブランクになってしまっているのですが、
ここに一文を追加するコードがわからず、ご教示いただけますと幸いです。

##各種コード
必要と思う部分のみ記載しております。
情報に不足ありましたらご指摘いただけますと幸いです。

HTML

1<div> 2 <h2 class="ttl-bd mt-4 mb-4">投稿情報</h2> 3</div> 4 5<form method="post" enctype="multipart/form-data"> 6 {% csrf_token %} 7 <div class="formpost"> 8 <div>エリア<span>※必須</span></div> 9 <!--下記render_field{% 〜 %}はデータベースを参照するコードで再現性がなく、検証に向かないのでグレーアウトしました--> 10 <!--{% render_field form.area class="form-control" placeholder="選択してください" %}--> 11 <select name="area" class="form-control" id="id_area"> 12                         <option value="選択肢A">選択肢A</option> 13 <option value="選択肢B">選択肢B</option> 14 </select> 15 </div> 16 <div class="formpost"> 17 <div>アトラクション<span>※必須</span></div> 18 <!--下記render_field{% 〜 %}はデータベースを参照するコードで再現性がなく、検証に向かないのでグレーアウトしました--> 19 <!--{% render_field form.attraction class="form-control" placeholder="選択してください" %}--> 20 <select name="attraction" class="form-control" id="id_attraction"> 21                         <option value="選択肢a">選択肢a</option> 22 <option value="選択肢b">選択肢b</option> 23                         <option value="選択肢c">選択肢c</option> 24 <option value="選択肢d">選択肢d</option> 25 </select> 26 </div> 27</form>

JavaScript

1<script> 2 const areaElement = $('#id_area'); 3 const attractionElement = $('#id_attraction'); 4 const area_attraction = { 5 '選択肢A': [ 6 { 7 'value': '選択肢a', 8 'name': '選択肢a' 9 }, 10 { 11 'value': '選択肢b', 12 'name': '選択肢b' 13 }, 14 ], 15 '選択肢B': [ 16 { 17 'value': '選択肢c', 18 'name': '選択肢c' 19 }, 20 { 21 'value': '選択肢d', 22 'name': '選択肢d' 23 }, 24 ], 25 }; 26 const changeArea = (select) => { 27 attractionElement.children().remove(); 28 const parentId = areaElement.val(); 29 const categoryList = area_attraction[parentId]; 30 for (const category of categoryList) { 31 const option = $('<option>'); 32 option.val(category['value']); 33 option.text(category['name']); 34 attractionElement.append(option); 35 } 36 if (select !== undefined) { 37 attractionElement.val(select); 38 } 39 }; 40 $('#id_area').on('change', () => { 41 changeArea(); 42 }); 43 if (areaElement.val()) { 44 const selectedCategory = attractionElement.val(); 45 changeArea(selectedCategory); 46 }

##開発環境
HTML5
Bootstrap 4.7.0
Django 2.2.16
jQuery 3.5.1

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

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

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

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

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

agumon

2021/07/26 02:27

頂いたソースをコピペして再現してみましたが、現状を再現できませんでした。 アトラクションのプルダウンも最初から触れてしまいますし、エリアのほうも「選択してください」が表示されていません。 ただエリアを選択するとアトラクションの選択肢が変わるのは再現できています。 コードの修正などがほしいです。
minari766

2021/07/26 15:55

ご連絡いただきありがとうございます。 実は説明用にコードを修正していたところ、事故解決してしまいました・・・。 折角お力添え頂いたにも関わらず、大変失礼致しました! 修正箇所は以下の通りです。 ・アトラクションがブランクになっていなかったのは、下記の通りエリアが「----選択してください」の時のquerysetを設定していなかったためです。下記の通りvalueとnameの値に'----エリアを選択してください'を追加しました。 ```JavaScript const area_attraction = { '----選択してください': [ { 'value': '----エリアを選択してください', 'name': '----エリアを選択してください' }, ], ``` なお、エリアに「----選択してください」が表示されていなかったのは、renderフィールド{% render_field form.area class="form-control" placeholder="選択してください" %} が、データベースから各種選択肢のデータを動的に持ってくるコードになっていたせいだと思います。 ご指摘の通りこのままだと再現性がないため、後世のため選択肢をselectタグで予めhtmlに表示するようにいたしました。 改めて、ご連絡ありがとうございました。
guest

回答1

0

自己解決

・アトラクションがブランクになっていなかったのは、下記の通りエリアが「----選択してください」の時のquerysetを設定していなかったため。下記の通りvalueとnameの値に'----エリアを選択してください'を追加。

JavaScript

1const area_attraction = { 2    '----選択してください': [ 3        { 4        'value': '----エリアを選択してください', 5        'name': '----エリアを選択してください' 6        }, 7    ],

投稿2021/07/26 16:00

minari766

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問