var setTime = "...";
var oSelect = document.createElement('select');
  ... (생략)
for (var i=0;i<startTimeList.length;i++) {
     var startTimeHHMM = startTimeList[i].startTimeHHMM;
     var startTime = data.startTimeList[i].startTime;
     if(setTime == startTimeHHMM){
         oSelect.selectedIndex = i;
     }

     var oOption = document.createElement('option');
     ... (생략)
     oSelect.appendChild(oOption, null);
}

위와 같은 식으로 코드를 작성하고 있었는데
자꾸 oSelect.selectedIndex가 -1로 설정되었다.

var setTime = "...";
var oSelect = document.createElement('select');
  ... (생략)
for (var i=0;i<startTimeList.length;i++) {
     var startTimeHHMM = startTimeList[i].startTimeHHMM;
     var startTime = data.startTimeList[i].startTime;
     var oOption = document.createElement('option');
     ... (생략)
     oSelect.appendChild(oOption, null);
     if(setTime == startTimeHHMM){
         oSelect.selectedIndex = i;
     }

}

위와 같이 바꾸어 주었더니 제대로 동작한다.
SELECT 오브젝트에서는 seletedIndex를 set 하기 전에 실제로 그 index가 존재하는지를 검사하는 일련의 validation을 거치는 것 같다.
만약 맨 위 코드처럼 selectedIndex에 해당하는 option 엘리먼트가 존재하지 않을 경우 selectedIndex는 -1로 설정된다.
저작자 표시 비영리
신고
posted by purecolor
테이블의 행을 동적으로 추가하는 작업을 하다가, 자꾸 "알 수 없는 런타임 에러"가 나길래 찾아보았는데, 다른 브라우저와 달리 ie에서는 몇몇 태그들이 읽기전용 속성으로 되어 있다고 한다.

읽기전용 태그들 : col, colgroup, frameset, head, html, style, table, tbody, tfoot, thead, title, tr

이것이 바로 innerHTML을 사용하여 내부의 값을 바꿀 수 없는 이유.


찾아본 예제로
var table = document.getElementById("TABLE_ID");
var row = table.insertRow();
var cell = row.insertCell();
cell.innerHTML = "문자열";
가 있었고,
appendChild, createElement, setAttribute 를 써도 될 듯.
신고
posted by purecolor