2012-08-02 206 views
0

以下是我的Javascript文档,运行于$(document).ready()。 Javascript是从我的网站页脚加载的。为简化起见,我已将[...]代替不相关的代码。“Uncaught ReferenceError:AutoResize is not defined”

// 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)'更好,并且可能会解决您的问题以启动。 – 2012-08-02 19:07:17

回答

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

当执行上面的setTimeout时,它将评估全局作用域中的字符串。 AutoResize()隐藏在闭包内部,因此找不到。

使用名称分配对函数的引用。

setTimeout(AutoResize, 500); 

另一种选择是封闭

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

,如果你想一个参数发送到功能,您将使用封闭方法。

+0

太好了,谢谢 - 这已经成功了! – Jack 2012-08-02 19:11:52

1

因为您在$(document).ready(function() { ... });闭包中定义了AutoResize,所以它不在全局范围内(这很好)。

当你调用setTimeout(这是坏的),当使用一个字符串,而不是一个函数引用,有一个假设,即函数调用该字符串将解析为是全局可用(因为setTimeout运行在window /全球范围) 。

-1

我不确定。它在我尝试这部分时起作用。

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

也许这是在别的地方出现了问题。

+0

-1您在全球范围内。 – epascarello 2012-08-02 19:21:38

+0

啊,你有我。我应该是一个提出编程问题的人。但是,stackoverflow不会让我,因为他们认为我太愚蠢,不能提问。但他们认为我很聪明,可以回答问题。所以这是件好事。 – zachdyer 2012-08-02 19:23:48

相关问题