본문 바로가기

먹고살거/JS(Jquery)

document.all의 에러


일단 document.all은 비표준이다.
다른브라우져는 모르지만 파이어 폭스에선 이구조때문에 웹페이지에 알럿이떠서 접근을 할수없다.

document.all 은 IE에서만 동작한다.
 
같은 name을 가진 input이 여러개 있을 때 document.form0.inputName.length 이런 식으로 사용하는 경우도 있다.

이 또한 IE에서만 동작한다.
 
w3c 스펙에 나와있는 document.getElementById 나 document.getElementsByName을 사용하여야 한다.

1. getElementById는 element를 반환한다. 다음과 같이 사용한다.

var ele = document.getElementById("testID");
 
alert(ele.value);

2. getElementsByName은  nodelist를 반환한다. 다음과 같이 사용한다.

var nodelist = document.getElementsByName("testName");
 
for ( var i=0; i<nodelist.length; i++ ) {
 
  alert(nodelist.item(i).value);
 
}

참고 : http://developer.mozilla.org/en/docs/DOM:document
Spec : http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-1006298752 


http://forums.mozilla.or.kr/viewtopic.php?t=580&highlight=document.all

웹사이트에서 버튼이 동작 되지 않는 경우 대부분 Javascript의 객체를 MSDOM에서 사용하는 document.all을 사용하기 때문에 그렇습니다. 자바스크립트 디버거를 통해 소스를 보았을 때 document.all 이 들어 있는 경우 document.all 대신 W3C DOM의 오브젝트 판별법을 사용하도록 웹사이트 관리자에게 알려주셔야 합니다. 


<b>document.all[objectID] -> document.getElementById("objectID")</b> 

혹시 거기에서 MS IE4 때문에 getElementById를 쓸 수 없다고 하면 getObject()를 아래처럼 정의한 후에 쓸 수 있다고 알려 주십시오. 


<blockquote>function getObject(objectId) { 
 
// checkW3C DOM, then MSIE 4, then NN 4. 
 
// 
 
if(document.getElementById && document.getElementById(objectId)) { 
 
return document.getElementById(objectId); 
 

 
else if (document.all && document.all(objectId)) { 
 
return document.all(objectId); 
 

 
else if (document.layers && document.layers[objectId]) { 
 
return document.layers[objectId]; 
 
} else { 
 
return false; 
 

 

즉, 다음처럼 하면 됩니다. 

getObject('sendbn').style.visibility="hidden";</blockquote> 

getObject는 http://www.orient-express.com/js/layers.inc 에 있습니다. 

혹은 다음에 있는 'x library'를 쓰는 것도 좋은 방법입니다.


해결책이 적힌곳
1. http://luke1021.tistory.com/entry/documentall-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B2%95 
2. http://www.okjsp.pe.kr/seq/51218