• 締切済み

innerHTMLを使って<SELECT>へ<option>を追加する方法について

はじめまして。 表題の通りなんですが、今<SELECT>タグ内に<option>タグをinnerHTMLもしくはinsertAdjacentHTMLを使って追加しようと考えています。 ところが、なぜかどちらを使った場合にも一番初めの<option>タグが消されてしまいます。 <select id=insertion> <option>---------------</option> </select> ↓ <select id=insertion> ---------------</option><option>test1</option> <option>test2</option> </select> となってしまうのです。スクリプトは以下のようなものを使っています。 function insertion(elementId) { elem = document.getElementById(elementId); elem.innerHTML += '<option>test1</option><option>test2</option>'; } 環境はWindowsXP、IE6.0です。単純にIE6.0のバグのような気もしないでもないんですが・・・。 ちなみに、innerHTMLもしくはinsertAdjacentHTMLを使う以外の方法例えばappendChildとかは使えません。というのも、prototype.jsを使ってAjax.Updaterを使ってリストボックスの自動生成を考えているのですが、Ajax.Updaterがフィールドの置換に使っているメソッドがinnerHTMLかinsertAdjacentHTMLな為、appendChildとかを使った方法だと修正が大掛かりになってしまうので・・・。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>コンテンツデータをそのまま書き込みたいんです・・・。なので、Optionも使えないんです。 意味不明。 option の内容にはテキストしか書けないような気がしますが・

dondonpog
質問者

補足

う~ん。コンテンツデータと言ったのには語弊がありましたね。 optionの中にテキストを書く、それは間違ってないんですが要は ある部分にテキスト(HTMLタグを含む)を挿入するような作りに なっているんです。 なので、オブジェクトを使うわけに行かないんですよ。 説明でもあるようにinnerHTMLやinsertAdjacentHTMLを使うと言う 制約があるわけです。 もちろん不可能では無いのですが、それであればやりようはいくらでも あって一番簡便に済ますには方法があるのであれば上記の関数を使って<option>を挿入したいと言う事なんですよ。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

elem.options[elem.length]=new Option("test1","test1"); elem.options[elem.length]=new Option("test2","test2"); の様に追加したらどうでしょうか

dondonpog
質問者

補足

いや、HTMLの文章と言うかコンテンツデータをそのまま書き込みたいんです・・・。なので、Optionも使えないんです。

関連するQ&A

  • select option value が IE だけで動かない

    select の option 項目を追加する javascript を組んでいるのですが IE だけ項目追加ができません。Windows の Firefox2、Safari は期待 通りに項目が追加できました。 option.value を指定しないと IE でも追加できます。IE 専用に特別な 別プログラムが必要なのでしょうか。ご存知の方よろしくお願いします。 var selectBox = document.getElementById("select1"); var option = document.createElement('option'); option.setAttribute('value','my_value'); option.appendChild(document.createTextNode('my_text')); selectBox.appendChild(option); 3行目をコメントアウトすれば IE でも select にデータが追加され ますが、肝心の value がないのでプログラム的にダメなんです。

  • セレクト部品の表示内容

    が選択されているかどうかによって変化するようにしたいのですが 以下のようにしてもうまくいきません。 何か解決策はないでしょうか? <script> function func() { document.getElementById("00").innerHTML="00.aa"; document.getElementById("01").innerHTML="01.bb"; } function func2() { document.getElementById("00").innerHTML="00"; document.getElementById("01").innerHTML="01"; } </script> <select onfocus="func()" onblur="func2()"> <option value="00"><span id="00">00</span></option> <option value="01"><span id="01">01</span></option> </select>

  • innerHTMLを使い、書き換えたい

    はじめまして。innerHTMLで文章を書き換えたいと思っています。 ■■■■■■■■■■■■ <div id='testid'>元の文章</div> <SCRIPT Laguage="JavaScript"><!-- document.getElementById('testid').innerHTML  = "この文章に書き換える"; --></SCRIPT> ■■■■■■■■■■■■ とするとうまく<div>内の文章が書き換わるのですが、 以下のようにjavascriptの記述を先に持ってくるとうまくいきません。 ■■■■■■■■■■■■ <SCRIPT Laguage="JavaScript"><!-- document.getElementById('testid').innerHTML  = "この文章に書き換える"; --></SCRIPT> <div id='testid'>元の文章</div> ■■■■■■■■■■■■ 検索して調べたところ、 「関数化させて id を指定したタグが表示されてから命令を実行させる」 必要があるとのことなのですが、書き方がわからずにいる次第です。 どなたかご教示いただければ幸いです。

  • tbody要素のinnerHTMLが書き換えられません

    こんにちは、教えてください。 <form1> <table id="test"> <tbod> <tr><td></td><tr> </tbody> </table> </form1> 例えばうえのような感じになっていたとき、 var tbody = document.getElementById( "test" ).getElementsByTagName( "tbody").item( 0 ); これでtbody要素が取得できると思います。 tbody.innerHTML += tbody.innerHTML; だけどうのようにすると【htmlfile:未知の実行時エラーです】となります。 document.getElementById( "test" ).innertHTML += document.getElementById( "test" ).innertHTML; という感じは一応動きます。なんででしょうか?

  • セレクトメニューに応じたdivタグの内容

    javascriptの質問です。フォーム内のセレクトメニューに応じて表示する配列を選び、複数のdivタグ内に表示したいと思っています。getElementByIdでセレクトメニューにIdをつけて呼び出し、selectedIndexでfunction()をonloadという事ですすめています。 複数のdivタグ内に書き出すのにinnerHTMLを使うんだなというところまでは理解しているつもりですが、上手く動きませんので、どなたかご存知の方にご教授願えればと思います。 <html> <head> <script type="text/javascript"> window.onLoad = function(){ document.getElementById("selected").onChange = function(){ var planTitle = this.selectedIndex; var object = document.getElementById("derection"); var TextData = [[],["text","text"],["text","text"]]; for (var i=0; i<TextData[planTitle].length; i++){ document.write(TextData[i]); } } } </script> </head> <body> <form action=""> <select id="selected"> <option value="title01">title01</option> <option value="title02">title02</option> <option value="title03">title03</option> </select> <div id="direction"></div> <div id="direction"></div> </form> </body> </html>

  • innerhtmlで出た値から、ifで返り値を出す

    innerhtmlで出た値から、要素を判断し、if文で返り値を求めることは可能でしょうか。 具体的にはinnerhtmlで、2未満の数値が出た場合、 りんごを、4未満であればみかんと返すようにいたしたいです。 なお、回答が長くなることから、script文のみの記述でOKですが、 script文は省略なさらないでください。 <!--適当--> <!DOCTYPE html> <html> <head> <title></title> <script language="javascript" type="text/javascript"> function selectboxChange101() { judge(); } function selectboxChange111() { judge(); } function judge() { /* この場合は、varではなくletを使う。*/ let val101 = document.forms.form101.Select101.value; let val111 = document.forms.form111.Select111.value; /* そもそも両方が当てたら、メッセージを出すのなら、outputは1つでいいのでは? */ let target = document.getElementById("output201"); let target2 = document.getElementById("output202"); if ((val101 == "要素101")&&(val111 == "要素111")) { target.innerText = "合っています。"; target2.innerText = "合っています。"; } else { target.innerHTML = "間違っています。"; } } </script> </head> <body> <form name="form101" action=""> <select id="Select101" onchange="selectboxChange101();"> <option>---</option> <option value101 == "要素101">要素101</option> <option>要素2</option> <option>要素3</option> <option>要素4</option> <option>要素5</option> </select> </form> </body> <body> <form name="form111" action=""> <select id="Select111" onchange="selectboxChange111();"> <option>---</option> <option value111 == "要素111">要素111</option> <option>要素12</option> <option>要素13</option> <option>要素14</option> <option>要素15</option> </select> </form> <div id="output201"></div> <div id="output202"></div> <div id="output203"></div> <div id="output204"></div> <div id="output205"></div> </body> </body> </html>

  • Safariで<iframe>のinnerHTMLを取得する方法

    MacのブラウザSafariで <iframe id="iframe1" src="test.txt" style="display:none" width="1" height="1"></iframe> で読み込んだtest.txtの内容が取得できなくて困っています。 ちなみにWindowsのIEとMacのFireFoxでは下記のようなかんじで取得できています。 IEの場合 var text = this.iframe1.document.body.innerHTML; FireFoxの場合 var text = document.getElementById("iframe1").contentDocument.body.innerHTML; MacのSafariでは上記どちらの方法でも取得できませんでした。 他にも色々調べて試してみたのですがやはり上手くいきません。 <iframe>タグ内のstyle指定をなくしてみたらiframeにテキストの内容は表示されているのであとは取得できればいいのですが。。 JavaScriptは初心者なので記述等不可思議かもしれません。 あわせてご教授いただけたらと思います。

  • innerHTMLが動作しない。

    JavaScriptをHTMLファイルに記述した場合、最初にfunctionスコープ内の動作以外は全て行なわれますよね。例えば、 <script type="text/javascript"> <!-- alert("test"); //--> </script> と書いた場合、ページの表示と同時にアラートが出ます。しかし上のalertの部分をdocument.getElementById("test").innerHTML = "test";にすると、これが実行されないのです。もちろん<div id="test"></div>タグはちゃんとbodyタグ内に記述してあります。functionを定義してbody onLoadで呼び出す方法もありますが、できればfunctionをむやみに使いたくないので、先のalertの時のように動作させたいのです。 これが動作しない原因は何なのでしょうか?

  • セレクトボックスの中を一部隠したい ( IE )

    セレクトボックスの中を一部隠したいのですが、IEでは隠れてくれません。firefoxなどでは、ちゃんと隠れるのですが、IEではどのようにすれば隠れるのでしょうか? (例) 以下のセレクトボックスで、0・1のみ表示されるようにしたいです。 <select name="s" id="s"> <option value="0" name="s[0]" id="s[0]" >0</option> <option value="1" name="s[1]" id="s[1]" >1</option> <option value="2" name="s[2]" id="s[2]" style="display:none;">2</option> </select> また、javascriptで隠した部分を表示・非表示したいのですが、あわせて教えていただけないでしょうか。 firefox など、では以下で変化があるのですが、 document.getElementById('s[2]').style.display='block';   //表示 document.getElementById('s[2]').style.display='none';   //非表示 IE ではうんともすんともいってくれません・・・ document.all('s[2]').style.display='block';   //表示 document.all('s[2]').style.display='none';   //非表示 ちなみにテスト環境はIE7になります、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • Mac版IE5でのinnerHTMLの動作について

    プルダウンメニュー(セレクトボックス)を2つ表示し、一つ目のメニューが選ばれると、それによって二つ目のメニューを変化させようとしています。WINDOWSのIEでは問題なく動作するのですが、MacのIE5では正しく動作しません。 フォームの画面では一つ目のメニューを選んだ時に二つ目のメニューの選択項目が変化し問題ないのですが、sendボタンを押したときにCGIに二つ目のメニューの内容が伝わりません。MacのIE5ではinnerHTMLを使うと正しく動作しないのでしょうか。 ----------------フォーム------------------ <HTML> <HEAD> <SCRIPT language=javascript> <!-- var s0=""; s0 += '<option value="option0-1">option0-1</option>' s0 += '<option value="option0-2">option0-2</option>' var s1=""; s1 += '<option value="option1-1">option1-1</option>' s1 += '<option value="option1-2">option1-2</option>' function change() { switch (Number(document.form1.select1.selectedIndex)) { case 0: document.all.obj1.innerHTML = '<select name="select2">' + s0 + '</select>'; break; case 1: document.all.obj1.innerHTML = '<select name="select2">' + s1 + '</select>'; break; } } //--> </SCRIPT> </HEAD> <BODY> <FORM name=form1 action=test-cgi.cgi method=get encType=multipart/form-data> <SELECT onchange=change(); name=select1> <OPTION value="option0">option0</OPTION> <OPTION value="option1">option1</OPTION> </SELECT> <BR> <SPAN id=obj1> <SELECT name=select2></SELECT> </SPAN> <INPUT type="submit" value="send"> </FORM> </BODY> </HTML>