2012-06-22 3 views
0

그래서 선택한 선택 요소의 모든 자식 노드를 제거하고 새 옵션 요소를 추가해야하는 자바 스크립트 코드가 있습니다. 옵션 요소의 값은 "personaggi"배열에 저장됩니다. 그래서 코드는 0, 1 및 2의 "k"값에 대해 잘 작동하는 것 같습니다. k = 3 일 때 올바르게 작동하지 않아서 이유를 찾을 수 없습니다. 이 기능은 다음과 같이해야한다 :<select>의 <option> 자식 노드를 변경하면 <select>이 선택됨 <option>

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); 
} 

희망은 내가 아니라 내 문제 : 당신은 기본적으로 루프에서 배열에서 요소를 제거하는

+0

질문 : 당신은 왜 사용하지 않는 JQuery와 ? 이것은 다소 친절합니다. http://www.appelsiini.net/projects/chained –

답변

1

설명 ...이 제대로 작동하지 않습니다. 배열의 크기는 시간이 지남에 따라 변하지 만 인덱스를 계속 증가시킵니다.

역순으로 노드를 반복하거나, 같은 것을 할 다음 중 하나를

while(select.firstChild) { 
    select.removeChild(select.firstChild); 
} 
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)); 
} 
관련 문제