2013-12-16 118 views
1

几乎所有我在StackOverflow中看到的SetInterval错误都是由于函数名称是作为“字符串”传递的,但也许我仍然缺少某种变量作用域问题。请指教!ReferenceError SetInterval未定义

我创建了具有暂停和播放功能的幻灯片。玩时,我希望幻灯片每3秒前进一步。但执行一次后,启动NextSlide函数的SetInterval失败。

我试过它...

SetInterval("nextSlide()", 3000) 
SetInterval(nextSlide(), 3000) 
var t = SetInterval(nextSlide(), 3000) 
var t = SetInterval(function(){nextSlide(), 3000) 

...失败每次。我在这里错过了什么?

var slide_1 = "slide_1"; 
var slide_2 = "slide_2"; 
var slideNum = 0; 
var odd = true; 
var totalMax = 6; 
var busy = false; 

var allSlides = new Array(); 
allSlides[0] = "test_01"; 
allSlides[1] = "test_02"; 
allSlides[2] = "test_03"; 
allSlides[3] = "test_04"; 
allSlides[4] = "test_05"; 
allSlides[5] = "test_06"; 
allSlides[6] = "test_07"; 

function PlaySlide(){ 
var t = SetInterval(nextSlide(),3000) 
document.getElementById("play").style.visibility = "hidden"; 
document.getElementById("pause").style.visibility = "visible"; 
} 

function nextSlide(){ 
if(slideNum < totalMax && !busy){ 
busy = true 
document.getElementById("loading").style.zIndex = 4; 
slideNum = slideNum + 1 
var slide = allSlides[slideNum] 
var link = "https://dl.dropboxusercontent.com/u/..." + slide + ".jpg" 
odd = !odd 
if(odd){document.getElementById(slide_1).src = link} //which <img>.onLoad lauches a fadeIn() 
else{document.getElementById(slide_2).src = link} 
} 
} 
+11

JavaScript是区分大小写的语言。这个方法被称为'setInterval'。 – VisioN

+1

P.S.它应该是'setInterval(nextSlide,3000);'。不要传递字符串,传递函数。此外,你想传递函数,而不是调用它并传递它的返回值。你也可以这样做:'setInterval(function(){nextSlide();},3000);'。 –

回答

5
var t = SetInterval(nextSlide(),3000) 
     ^     ^^ 

你有2个问题

没有setInterval的,作者是小写。其次,您呼叫的功能nextSlide(),不分配给它

var t = window.setInterval(nextSlide, 3000); 
+0

美丽。简单的美丽! – user3107660

0

请使用"setInterval"代替“的setInterval”,看看结果。