AjaxでSelectのOptionを書き換えるときのメモ。
こんなタグがあったとする。
<SELECT id="selectTag" name="selectTag"></SELECT>
これのOPTIONを動的に( Ajax )で書き換えたいと思ったならば
$( 'selectTag' ).innerHTML = obj.responseText;
#ここで[obj.responseText]で返却される文字列は以下の通りとする
<option value='1'>感想</option>
<option value='2'>要望</option>
<option value='3'>バグ</option>
ってやるとIEでは動かない。
FireFoxでは動くようです。
動かない理由はSelectタグがinnerHTMLで書き換えられるタグではないかららしい。
回避方法としては、以下のようにすること
$( 'selectTag' ).outerHTML = obj.responseText;
#ここで[obj.responseText]で返却される文字列は以下の通りとする
<SELECT id="selectTag" name="selectTag"><option value='1'>感想</option>
<option value='2'>要望</option>
<option value='3'>バグ</option>
</SELECT>
これで動きます。
innerHTMLがタグの中身を書き換えるのに対して、
outerHTMLは外側からまるっと書き換える処理のようです。
これでIEで正常に書き換える事ができるようになりました。
が、FireFoxでは動かないという結果に。
FireFoxさまはどうやらouterHTMLには対応していないらしいとの事。
・IEでSelectの中身が書き換えられない。
・FireFoxではouterHTMLはサポート外
以上の点を踏まえて、回避方法を考えてみた。
<div id='selectTagSet'></div>
$( 'selectTag' ).innerHTML = obj.responseText;
#ここで[obj.responseText]で返却される文字列は以下の通りとする
<SELECT id="selectTag" name="selectTag">
<option value='1'>感想</option>
<option value='2'>要望</option>
<option value='3'>バグ</option>
</SELECT>
これで、IEもFireFoxも正常に動きます。
ちなみにサンプルは こちら
<Div>の中身をinnerHTMLで書き換えてあげれば、
幸せになれる!