2009-05-15 2 views
0

기존 레거시 웹 페이지 (기존 파트를 수정해서는 안되지만 추가)를 수정하고 웹 페이지가 document.write를 사용하여 특정 html 요소를 작성합니다. 내가id 문제를 사용하여 요소 가져 오기

<script type="text/javascript" language="javascript"> 
    var v = document.getElementById('td_date_cal_0'); 
    alert(v); 
</script> 

를 사용할 때 V는 널 (null)이되고 난 버튼을 만들 때와 같은 클릭으로,

<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />; 
<script type="text/javascript" language="javascript" > 
    function mnLoader() { 
     var v = document.getElementById("td_date_cal_0"); 
     alert(v); 
    } <br /> 

</script> 

방법 사용자 작업의 필요없이 요소를 얻는 방법 어떤 생각을 클릭?

감사합니다, EBE

답변

1

난 당신이 당신이 얻을하려고하는 요소 전에 스크립트 요소를 배치 할 것 같은데요.

가장 간단한 방법은 body 요소의 END 태그 바로 앞에 스크립트 요소를 배치하는 것입니다.

8

onload 이벤트가 document 또는 window 인 스크립트를 첨부 해보십시오.

function mnLoader() { 
var v = document.getElementById("td_date_cal_0"); 
alert(v); 
} 
// Execute the function after the page has loaded 
document.onload = function() { 
mnLoader(); 
} 
+0

마티아스가 옳습니다. 당신이 겪고있는 문제는 당신이 얻으려고하는 DOM 요소가 아직 메모리에 DOM에 실제로 추가되지 않았기 때문입니다 .. window.onload는 해결책이지만 다른 것들도 있습니다 .. –

+0

또한 document.write는 독성이 있습니다. DOM 메소드 또는 innerHTML을 사용해야하는 경우 – annakata

1

ID가 "td_date_cal_0"인 요소가 만들어지기 전에 스크립트가 실행되기 때문에 이것이 일어날 것으로 예상됩니다.

코드를 조작중인 요소 아래로 이동하거나 코드를 document.onload 이벤트까지 연결해보십시오.

0

@Mathias는 문제를 해결할 가능성이 큰 예를 제시했습니다. 어느 것이 document.getElementById를 사용하여 액세스하려고 시도하는 요소가 아직 시도 중에 DOM에로드되지 않았다는 것입니다.

그러나 최대한 빨리 코드를 실행할 수있는 방법에 관심이 있다면 "dom : loaded"이벤트 또는 DOM 준비 이벤트를 관찰하는 것이 더 좋습니다. 이것은 window.onload을 호출하는 것보다 복잡하지만, Prototype.js 또는 jQuery과 같은 프레임 워크가 도움이 될 수 있습니다.

this page에서 Michael Sharman이 바로이 기능에 대해 이야기합니다.

당신은 다음과 같은 코드를 작성할 수 있습니다 : 당신이 프레임 워크를 사용하지 않으려면, 당신은 단지 표준 자바 스크립트 호출을 사용하여 동작을 복제 할 수 있습니다 분명히


document.observe(document, 'dom:loaded', initFunction); 

function initFunction() 
{ 
    // this code will run as soon as DOM is loaded, 
    // but before any images are loaded 
} 

을하지만, 당신이 준비해야 할 것 브라우저 간의 차이점을 다루십시오. 당신은 정확하게 코드 작업을 다음 (즉 를 DOMContentLoaded)

0

이벤트 및 기타 브라우저의 유사한 이벤트를 onreadystatechanged 보고 시작할 수 있습니다.

<input type="text" id="xxxx"/> 
<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />; 
<script> 
     function mnLoader() { 
     var v = document.getElementById("xxxx").value; 
     alert(v); 
     } 
</script>