嗨我相对较新的javascript和jQuery,并且在尝试创建一个函数时,运行时间间隔为100毫秒我遇到了一个问题。我似乎进入了firebug的控制台并且错误女巫说clasing()不是已定义。这是我的代码:
$(document).ready(function() {
var prev = $("img.selected").prev();
var curent = $("img.selected");
var next = $("img.selected").next().length ? $("img.selected").next() : $("img:first");
$("img").not(":first").css("display","none");
function clasing() {
curent.removeClass("selected");
next.addClass("selected");
}
setInterval("clasing()",100);
});
我在这里做错了什么?谢谢
答案 0 :(得分:5)
您有范围问题。您的变量(prev
,curent
和next
)可在.ready
范围内访问,例如您的函数clasing
。但是当您使用setInterval
添加要在区间中调用的此函数时,此函数应位于全局范围内(window
对象内)。然后,您应该将此函数声明为window.clasing = function(){ ... }
,但是,执行此操作时,在.ready()
范围内声明的变量将无法在此范围外运行此函数,因此您的所有变量必须位于全局范围内太。这应该可以解决你的问题。
但是,这不是一个好的编程习惯,你应该在clasing
函数中声明你的变量,然后它们只能在函数范围内访问;并且您的函数必须在.ready()
函数之外进行delcared,然后在.ready()
函数内声明区间。
所以,你的代码应该是这样的:
function clasing(){
var prev = $("img.selected").prev();
var curent = $("img.selected");
var next = $("img.selected").next().length ? $("img.selected").next() : $("img:first");
curent.removeClass("selected");
next.addClass("selected");
}
$(document).ready(function() {
$("img").not(":first").css("display","none");
setInterval("clasing()",100); //or just setInterval(clasing,100);
});
答案 1 :(得分:3)
将setInterval("clasing()",100);
更改为setInterval(clasing,100);
答案 2 :(得分:3)
更改
setInterval("clasing()",100);
要
setInterval(function() {
clasing();
}, 100);
现在您对setInterval的调用正在全局范围内运行,但您的函数是在jquery函数内定义的。创建闭包将使您可以访问jquery函数成员。