0

したがって、選択したselect要素のすべての子ノードを削除して新しいオプション要素を追加する必要があるJavaScriptコードのこれらの行があります。オプション要素の値は「personaggi」配列に格納されます。したがって、コードは0、1、および2の「k」値に対して正常に機能しているように見えます。k= 3の場合、コードは正しく機能しなくなり、理由がわかりません。関数は次のようになります。

response=xmlhttp.responseText;
var personaggi=response.substr(1).split("+");
select=document.getElementById('select_personaggi');
var length=select.childNodes.length;
for(k=0;k<length;k++){ 
    select.removeChild(select.childNodes[k]); 
}
for(i=0;i<personaggi.length;i++){ 
    var option=document.createElement('option'); 
    option.setAttribute('value', personaggi[i]); 
    var text=document.createTextNode(personaggi[i]); 
    option.appendChild(text); 
    option.appendChild(text); 
    select.appendChild(option); 
}

私が私の問題をうまく説明したことを願っています:)

4

2 に答える 2

1

選択したオプションを処理する方が簡単でクリーンです。

response=xmlhttp.responseText;
var personaggi=response.substr(1).split("+");
select=document.getElementById('select_personaggi');

var length = select.options.length;
for (k = 0; k < length; k++) {
    select.options[0] = null;
}

for (i = 0; i < personaggi.length; i++) {
    select.options.add(new Option(personaggi[i], personaggi[i], true, false));
}
于 2012-06-22T11:40:01.263 に答える
1

基本的に、ループ内の配列から要素を削除しています...これは正しく機能しません。配列のサイズは時間とともに変化しますが、インデックスをインクリメントし続けます。

ノードを逆の順序で繰り返すか、次のようにします。

while(select.firstChild) {
    select.removeChild(select.firstChild);
}
于 2012-06-22T11:23:11.507 に答える