IEだとJavascriptでselectタグの中身を変更できない

Prototype.js使ってajaxでSelectタグのプルダウン連動をやってたらはまった。
あるSelectボックスの値を変えると、連動して他のSelectボックスの値をAjaxでサーバから取得し、optionタグの内容を全て入れ替えるというもの。例えば、都道府県を変更したら、連動してその県の市町村がプルダウンに入るようなもの。

Firefoxだと問題ないんだけど、IEだとSelectタグのオプションタグごと全てAjax経由で取得して入れ替えようとしたら、だめだった。IEのSelectタグはReadonly属性らしい。


とりあえず、spanタグでSelectタグごと囲んで書き換えるという荒業で対応。Ajaxで取得するのはSelectタグ、optionタグの全て。divタグで囲むと不用意に改行が入ってレイアウトが崩れるので、spanタグで対応。
とりあえず、view側は下記のようにした。smartyタグが入ってます。

<select name="address1" id="address1">
  <option></option>
  {{html_options options=$select_address1 selected=$request.address1}}
</select>

<span id="address2">
  <select name="address2" id="address2val">
    <option></option>
    {{html_options options=$select_address2 selected=$request.address2}}
  </select>
</span>

<script type="text/javascript">
//<![CDATA[

new Form.Element.EventObserver('address1', function(element, value) {new Ajax.Updater('address2','/hoge/ajaxselect/address2', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize('address1'), requestHeaders:['X-Update', 'address2']})})

//]]>
</script>


それで、Ajaxで'/hoge/ajaxselect/address2'にアクセスすると下記の市町村を含むselectタグを返す

<select name="address2" id="address2val">
<option></option>
{{html_options options=$select_address2}}
</select>