2013-08-02 188 views
0

我正在尝试创建一个自动更改的“旋转”DIV。 我有一个函数switchRotator(id)使用JQuery来改变DIV的内容。 这里是造成错误的函数:功能未定义错误

function launchTimedRotator(){ 

//timedSwitch is a boolean value that can be enabled/disabled with buttons 

if (timedSwitch) { 

    if (counter<2) { 
     counter++; 
    } else { 
     counter = 1; 
    } 

switchRotator(counter); 
setInterval("launchTimedRotator()",3000); 
return null; 
} 

}; 

正如你可以看到我试图通过调用自身的功能到底使用递归。 我收到谷歌Chrome的开发者工具的错误是: 未捕获的ReferenceError:launchTimedRotator事先不

+0

你的函数不是全局的,如果你传递一个字符串,这是必需的。你可以做'setInterval(launchTimedRotator,3000);',但为什么递归?您将同时运行的间隔数量呈指数增长。 –

+0

我在其中一个“旋转器”上看到类似的概念后,我使用了递归。我会增加吗?它只是调用自己,然后结束,功能不重复。或者我错过了什么? – slava

+1

'setInterval()'每3秒连续运行一次该函数。所以当它再次调用函数时,它会启动另一个'setInterval',但原始的仍在运行,所以现在你有两个。然后再过3秒钟,这两个人会再次调用函数,再创建两个,原来的两个仍然在运行,四个,然后是八个,然后是十六个......等等。 –

回答

1

setInterval()使用字符串定义

由于不是很好的做法。改用匿名功能:

setInterval(function() { 
    launchTimedRotator(); 
}, 3000); 

虽然setInterval似乎并没有在它的位置。它最终会创建很多间隔的范例。也许你打算使用setTimeout代替?

通常,您可以使用setInterval()setTimeout()获得相同的效果;

setInterval情况下,将刚刚setInterval(function() {}, 3000),并且在setTimeout情况下,这将是

function runTimeout() { 
    setTimeout(function() { 
     runTimeout(); 
    }, 3000); 
} 

我个人更喜欢setTimeout(),能够更可靠和易于管理。

+0

或'setInterval(launchTimedRotator,3000)' –

+0

SetTimeout是我想要的,你是对的。我使用了一个匿名函数+ setTimeout,它的功能就像一个魅力。非常感谢。我仍然对JS语法不熟悉 – slava