selectを動的に作成するコードをJQueryで書いています。そのselectの要素optionの値は作成後も何度か変更します。
var select;
function setSelect(from, to){
select = $('<select>');
for(var i = from; i <= to; i++) select.append($('<option>').text(i));
};
setSelect(1, 10);
$(document.body).append(select)
setSelect(2, 6);
上記のコードを実効するとsetSelect(2, 6);は無視された状態になります。
上記のsetSelectは引数from~引数toの値をoptionにしてselectにその値をセットします。setSelect(1, 10);で1~10までを選択できるselectができ、次に setSelect(2, 6);でselectが2~6に変わることを期待しますが、そうなりません。どのようにしたら、変更が反映されるのでしょうか?
※実際のプログラムではsetSelect(2, 6)のような呼び出しは、プログラム(イベント発生など)が呼び出します。
No.2ベストアンサー
- 回答日時:
>しかしながら、なぜこれでうまくいくのかは結局分かりません。
質問者様がご提示のコードは、「新しいセレクトを生成する」コードになっています。
例えば、最初のコードで
>setSelect(1, 10);
>$(document.body).append(select);
>setSelect(2, 6);
$(document.body).append(select); //追加
などとしてみれば、セレクト要素が追加されるのがわかるでしょう。
一方で、なさりたいことは、「同じselect要素に対してオプションの内容を入れ替える」ということかと推測します。
その場合は対象となるselect要素は固定なので、最初にselect要素を作成しさえすれば良く、また、入れ替えるためには一旦内容を空にしてから必要なものを追加するようにしておく必要があります。
別の考え方として、ご提示のコードのように新しくselect要素を作成し、それまでのものとそっくり入れ替える(もとのものを削除し、新しいものを追加する)ようにしても、ご希望のような結果になると思います。
ご回答ありがとうございます。理解出来ました。
質問文にあるコードでうまくいかない原因はfor文のselect = $('<select>');をしているところですね。新しいインスタンスがselectに入るためselectの参照が変わっていまい今まで参照していたものとは別の参照になっているからですね。
この質問に訪れる人のためを考え、まとめると、
select内部のoptionを変更(更新)するときは
var select = $('<select>')のように最初に宣言したら、このselectのoptionを変えるときはselect.empty()を使いselectの中を空にしてから、optionを追加すればいいです。
No.1
- 回答日時:
setSelect関数を呼び出しただけでは反映されません。
変数selectはJavaScript内のデータでしか無く、DOMに直接作用しません。
以下のようにすると、ご希望の動作になるのではないでしょうか。
var sel = $('<select id="select">');
$(document.body).append(sel)
var select = $('#select');
function setSelect(from, to){
select.empty();
for(var i = from; i <= to; i++) select.append($('<option>').text(i));
};
setSelect(1, 10);
setSelect(2, 6);
ご回答ありがとうございます
お礼を書いている途中で疑問があってそれを確かめていたら、なぜか自分でこの質問を解決する一つの方法にたどり着きました。
var select = select = $('<select>');
$(document.body).append(select); // 最初にappendしたらなぜかうまくいきました
function setSelect(from, to){
select.empty();
for(var i = from; i <= to; i++)
select.append($('<option>').text(i));
};
setSelect(1, 10);
setSelect(2, 6);
なるべくなら、idを使わずに実装したかったので、上記のような形でうまくいって良かったです。しかしながら、なぜこれでうまくいくのかは結局分かりません。
>変数selectはJavaScript内のデータでしか無く、DOMに直接作用しません。
というところに疑問をもってそれを試していたらこれにたどり着きました。一見するとDOMにも直接作用しているように思えます。どうなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
jQuery セレクトボックスで選択されている値をもう一度選んだ時、イベントを実行させる方法
JavaScript
-
htmlのolやulなどlistにtitleやcaptionをつけられますか?
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
CSVファイルを読みこみ、プルダ...
-
Selectボックスの幅を自動で広...
-
onFocusOutが複数回呼ばれる!
-
jQuery セレクトボックスで選択...
-
リストボックスの項目の順番を...
-
javascriptでの2つのプルダウン...
-
javascriptでselectボックスの<...
-
セレクトを全て選択されていな...
-
【javascript・PHP】プルダウン...
-
INPUTで入力された値やSELECTで...
-
<textarea>にプルダウンを表示...
-
thickbox.js使用時のフォームの...
-
現在時刻を取得してフォームのs...
-
selectメニューのselectedの位...
-
ブラウザの戻るボタンを押した...
-
リロード時もコンボボックスの...
-
HTMLコンボボックスへの項目追加
-
プルダウンで現在の年月日を取...
-
セレクトメニューで選択された...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
CSVファイルを読みこみ、プルダ...
-
jQuery セレクトボックスで選択...
-
JQuery selectが反映されない
-
selectメニューのselectedの位...
-
onFocusOutが複数回呼ばれる!
-
フォームのメニューリストを外...
-
セレクトを全て選択されていな...
-
現在時刻を取得してフォームのs...
-
Selectの中身をfor文で入れる
-
javascriptでselectボックスの<...
-
html selectの内容を初期値に戻す
-
ブラウザの戻るボタンを押した...
-
プルダウンで現在の年月日を取...
-
リストボックスの項目の順番を...
-
プルダウンとテキストの連動
-
<textarea>にプルダウンを表示...
-
DBの値を利用して、3つの連動し...
-
UWSCのIE操作でプルダウンを選...
おすすめ情報