我有这个javascript代码:
$(function(){
var currentCarouselItem = 1; //set carousel to first slide
var runCarousel = 1;
$(window).load(function(){
setTimeout('autoScroll()', 10000);
});
function autoScroll(num){
if (runCarousel == 1) {
$('.carouselItem.' + currentCarouselItem).animate({left: '975px'}, 'slow', function(){
$(this).removeClass('active');
$(this).attr('style','');
var nextItem = currentCarouselItem + 1;
if (nextItem == 7) {
nextItem = 1;
}
$('.carouselItem.' + nextItem).animate({left: '110px'}, 'slow', function(){
$(this).addClass('active');
})
})
}
}
})
每当我运行网站时,它都会抛出一个控制台错误:Uncaught ReferenceError: autoScroll is not defined
知道它为什么认为没有定义?
答案 0 :(得分:4)
setTimeout('autoScroll()', 10000);
为什么要把它放在引号中?
setTimeout(autoScroll, 10000);
那是初学者。
此外,您在这里遇到了范围问题。
答案 1 :(得分:3)
我可以尝试为你解答,但我认为这个人做得更好:
答案 2 :(得分:1)
我认为这是因为你的autoScroll
函数是由最外层$(function(){})
创建的封闭内部。因此,eval(用于评估setTimeout
中的字符串)无法找到它,因为它在“全局”范围内运行。
您可以将autoScroll
的定义移到外面。
另外,如 jcolebrand 所示,请删除引号。
答案 3 :(得分:1)
我认为这是因为当你传递一个字符串作为setTimeout()
的第一个参数时,javascript基本上从该字符串的全局范围运行eval()
。 autoScroll
生活在$(function() { })
范围内,因此无法从全球范围内“看到”。
尝试将其更改为setTimeout(autoScroll, 10000);
答案 4 :(得分:1)
您的代码存在一些问题,但autoScroll
函数未定义的原因是它在文档就绪函数的范围内定义,但是在eval
之后执行如果没有适当的关闭,文件已经超出了范围。
答案 5 :(得分:0)
$('.carouselItem.' + currentCarouselItem).animate({left: '975px'}, 'slow', function(){
$(this).removeClass('active');
$(this).attr('style','');
var nextItem = currentCarouselItem + 1;
if (nextItem == 7) {
nextItem = 1;
}
$('.carouselItem.' + nextItem).animate({left: '110px'}, 'slow', function(){
$(this).addClass('active');
});
});
对于初学者,你需要在这样的函数结尾处使用半冒号