jQuery setInterval()未定义的函数错误

时间:2012-03-20 19:52:08

标签: javascript jquery

嗨我相对较新的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);
});

我在这里做错了什么?谢谢

3 个答案:

答案 0 :(得分:5)

您有范围问题。您的变量(prevcurentnext)可在.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函数成员。