3

したがって、IEを除く、これまでにテストしたすべてのブラウザーでうまく機能する次のコードがあります。

var array = eval( '(' + xmlHttp.responseText + ')' );
var html = '';

for(var key in array)
{
    html += '<option value="' + key  + '">' +array[key] + '</option>';
}
alert(html);
document.getElementById('countries').innerHTML = html;

問題はにあり.innerHTMLます。アラートはデータを正常に出力しますが、内部でタグが削除され、単語が連続して表示されます。

それで、その問題を解決する可能性のあるアイデアはありますか?

4

2 に答える 2

5

IEでは、の要素の.innerHTML設定に使用できないという既知の問題があります。optionselect

代わりに、DOMメソッドを使用して要素を作成する必要があります。

var fragment = document.createDocumentFragment();

for(var key in array) {
    var opt = fragment.appendChild(document.createElement("option"));
    opt.value = key; 
    opt.text = array[key];
}

document.getElementById('countries').appendChild(fragment);

また、arrayが実際の配列の場合は、JavaScriptforの代わりに使用します。for-in

selectそして、最初に空にする必要がある場合は.innerHTML = ""、ループを使用して、またはそれ以上の方法でそれを行うことができます。

var sel = document.getElementById('countries');
while (sel.firstChild)
    sel.removeChild(firstChild);

sel.appendChild(fragment);
于 2012-12-02T20:39:40.213 に答える
3
var select = document.getElementById('countries'); // assuming this is your <select>
for (var key in array) {
    var option = document.createElement('option');
    option.value = key;
    option.text = array[key];
    select.appendChild(option);
}
于 2012-12-02T20:40:52.030 に答える