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

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

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

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

jQuery

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

Q&A

解決済

2回答

3812閲覧

jQueryでプルダウンに選択肢を動的に追加したい

aaas

総合スコア15

JavaScript

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

jQuery

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

0グッド

1クリップ

投稿2019/07/30 07:50

先日質問させていただいた、selectタグのoptionを動的に生成する件について追加で質問させてください。
(全体のコードは最下部に記載しています)

HTML

1<select name="test" id="test"></select> 2<input type="text" id="input"> 3<input type="button" id="add" value="追加">

というプルダウンのフォームにjQueryで選択肢を動的に追加しようと思います。
このコードに対して、

JavaScript

1var input = $("#input").val(); 2 3$("#test").append( 4 `<option value="${input}" selected>${input}</option>` 5); 6

↑ではxssの標的になるため、textContentsetAttributeを使いましょう、とアドバイスをいただきました。

その点を踏まえて考えてみたのですが、以下で止まってしまいました。。

JavaScript

1var input = $("#input").val(); 2 3$("#test").append("<option></option>"); 4var option = (appendで追加したoptionを取得) 5$(追加したoption).textContent(`${input}`); 6$(追加したoption).setAttribute("value", `"${input}"`); 7

質問

  1. 流れは上記で問題ないでしょうか?
  2. (appendで追加したoption)はどのように取得すればいいでしょうか?
  3. (面倒でなければ) 追加するたびに新しい方にselectedをつけかえるにはどうしたらいいでしょうか?
  4. (面倒でなければ) selectedがついたものをブラウザをリロードしても保持するためにはどうしたらいいでしょうか?

1.2だけでもものすごく助かります。
3はoptionを取得さえできれば自分でできる気がします。

長々と申し訳ありません、何卒よろしくお願い致します。

 

※全体のコード 

JavaScript

1<select name="test"id="test"></select> 2 <input type="text" id="input"> 3 <input type="button" id="add" value="追加"> 4 5 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 6 <script> 7 var key = 'some-select'; 8 $(function() { 9 // 「追加」ボタンでlocalStorage/selectに追加 10 $("#add").click(function() { 11 var input = $("#input").val(); 12 var storedArr = JSON.parse(localStorage.getItem(key) || '[]'); 13 storedArr.push(input); 14 localStorage.setItem(key, JSON.stringify(storedArr)); 15 16 17 $("#test").append( 18 `<option value="${input}" selected>${input}</option>` 19 ); 20 }); 21 22 // localStorageに保存したデータをoptionに表示 23 var keys = JSON.parse(localStorage.getItem(key) || '[]'); 24 for(i = 0; i < keys.length; i++) { 25 var selectTag = document.getElementById("test"); 26 selectTag.insertAdjacentHTML( 27 "beforeend", 28 `<option value="${keys[i]}">${keys[i]}</option>` 29 ); 30 } 31 }); 32 </script>

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

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

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

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

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

guest

回答2

0

html

1<select name="test" id="test"></select>

javascript

1$(function(){ 2 let select = $('#test'); 3 let array = ['----', '1', '2', '3']; 4 $.each(array, function(i, txt){ 5 let option = $('<option>'); 6 option.val(i).text(txt).appendTo(select); 7 }); 8 // デフォルト値設定 9 select.val(1); 10});

javascript

1 2let select = document.getElementById('test'); 3 4let array = ['----', '1', '2', '3']; 5 6array.forEach(function(txt, i){ 7 let option = document.createElement('option'); 8 option.value = i; 9 option.innerText = txt; 10 select.appendChild(option); 11}); 12 13select.selectedIndex = 1;

投稿2019/07/30 08:01

編集2019/07/30 08:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aaas

2019/07/30 08:46

ご回答ありがとうございます。今回はbuttonをクリックするたびにoptionを増やしたいので、いただいたコードでは意図が異なる?でしょうか?(読解力不足でしたら申し訳ありません。。) mts10806さんと違ったアプローチでとても参考になります。ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/07/30 08:51 編集

ちょっと変えればできますね。 ループの中でやっていることを、クリックイベントに渡せば済むことです。
aaas

2019/07/30 08:52

なるほど、素人読解で大変失礼しました。ありがとうございました。
guest

0

ベストアンサー

jQueryであればoptionもjQueryで生成して.text()を通せば良いと思います(※内部的にやっていることは同じです)

js

1var input = $("#input").val(); 2var addOption = $('<option>',{ 3 text:input , 4 value:input 5}); 6$('#test').append(addOption);

投稿2019/07/30 08:03

m.ts10806

総合スコア80850

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

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

aaas

2019/07/30 08:48

ものすごくシンプルな回答(とても良い意味で)をありがとうございます。addOptionのような書き方は知らなかったので、基礎を勉強します。とても助かりました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問