2012-01-22 2 views
4

다음 코드에서 나는 상기 오류를 수신하고 정확히 이유를 모르겠습니다. 여기에 다른 스레드를 보았지만 오류를 찾을 수 없습니다.JavaScript INDEX_SIZE_ERR : DOM 예외 1

스크립트의 목적은 문자열 배열을 localstorage에 저장하는 것입니다. 그런 다음이 문자열 배열이 테이블로로드됩니다.

다음 함수 내 웹 양식 필드의 값을 가져옵니다 -

function saveContact() { 
     var contact = [nameDOM.value, addDOM.value, townDOM.value, postalDOM.value, mobDOM.value]; 
     localStorage.setItem(window.localStorage.length, contact); 
     showContacts(); 
    } 

이 함수 곳이 정보를 테이블에 -

function showContacts() { 
     for(i=0; i<window.localStorage.length; i++) { 
      var contactRow = cTableDOM.insertRow(i); 
      var contactCell = contactRow.insertCell(i); 
      var text = document.createTextNode(localStorage.getItem(i)); 
      contactCell.appendChild(text); 
     } 
    } 

내가 수신하고 동작이있다; 내 테이블에 다른 "연락처"를 입력하려고하면 첫 번째 "연락처"가 후자의 "연락처"대신 반복됩니다.

답변

3

문제는 새 행을 만들고 insertCell(2)을 호출하는 것입니다. 이것은 숫자보다 커서 INDEX_SIZE_ERR을 얻습니다.

Mozilla (강조 첨가)에서 : 인덱스 -1 또는 셀들의 수와 동일한 경우

셀은 행의 마지막 셀로서 부가된다. 인덱스가 생략되거나 행 수보다 크면 오류가 발생합니다.

또한 단지 새로 td 생성에 appendChild를 호출 할 수 있습니다.

var contactCell = contactRow.appendChild(document.createElement("td"));