2012-08-02 7 views
0

다음은 자바 스크립트 문서이며 $(document).ready()에서 실행됩니다. Javascript는 내 사이트의 바닥 글에서로드됩니다. 단순화를 위해 관련이없는 코드 대신 [...]을 입력했습니다."잡히지 않은 ReferenceError : 자동 크기가 정의되지 않았습니다"

// When the document is ready, run the display scripts 
$(document).ready(function() { 

// Define the frame height functions 
function getDocHeight(doc) { 
    [...] 
} 
document.domain = 'mysite.com'; 

function resizeIframe() {setIframeHeight('date-price-book');} 

function setIframeHeight(ifrm) { 
    [...] 
} 

function AutoResize() { 
    resizeIframe(); 
    resizeIframe(); 
    setTimeout("AutoResize()", 500); 
} 

AutoResize(); 

[... more Javascript code...] 

페이지를 실행할 때 오류 : Uncaught ReferenceError: AutoResize() is not defined이 표시됩니다.

AutoResize(); (위의 예제 코드에서 마지막 줄)을 주석 처리하여이 오류가 발생하지 않도록 할 수 있습니다. 그러나 왜이 오류가 발생합니까? 물론 AutoResize() 함수는 바로 위에있는 줄에 정의되어 있습니까?

도움 주셔서 감사합니다.

+2

'setTimeout (AutoResize, 500)'이 더 좋으며 부팅에 문제가있을 수 있습니다. –

답변

3
setTimeout("AutoResize()", 500); 

위의 setTimeout을 실행하면 전역 범위의 문자열이 평가됩니다. AutoResize()는 클로저 내부에 숨겨져 있으므로 찾을 수 없습니다.

이름을 사용하여 함수에 대한 참조를 지정하십시오.

setTimeout(AutoResize, 500); 

다른 옵션은 폐쇄

setTimeout(function() { AutoResize(); }, 500); 

당신이 함수에 매개 변수를 보내려면 당신은 폐쇄 방법을 사용하는 것입니다.

+0

위대한, 고마워 - 그 트릭을 마쳤습니다! – Jack

1

$(document).ready(function() { ... }); 클로저 안에 AutoResize을 정의했기 때문에 전 세계적으로 사용할 수 없습니다 (이는 좋음). setTimeout을 (불량 인)를 호출 할 때 함수 참조 대신 문자열을 사용하는 경우

는 문자열로 해결할 수 있다고 함수 호출 (때문에 window/전역에서 setTimeout 실행) 전 세계적으로 사용할 수 있음을 가정이 .

-1

잘 모르겠습니다. 이 부분을 시도 할 때 작동합니다.

function AutoResize(){  
    console.log('test'); 
    setTimeout('AutoResize()',1000); 
} 
AutoResize(); 

어쩌면 뭔가 잘못 될 수 있습니다.

+0

-1 당신은 전역 범위에 있습니다. – epascarello

+0

아, 날 잡았어. 나는 프로그래밍에 관한 질문을해야한다. 그러나 stackoverflow 그들은 내가 질문을하기에는 너무 어리 석다고 생각하기 때문에 나를 보내지 않을 것입니다. 하지만 그들은 내가 질문에 대답 할만큼 똑똑하다고 생각합니다. 그래서 그것은 좋은 일입니다. – zachdyer

관련 문제