TypeError:arguments.callee.caller不是函数

时间:2013-06-27 16:11:24

标签: jquery

我希望有人可以帮我纠正我在自定义脚本中遇到的一些问题。我接管了网站的管理,以下代码似乎存在问题:

/*  jQUERY CUSTOM FUNCTION 
------------------------------ */
jQuery(document).ready(function($) {
$('.ngg-gallery-thumbnail-box').mouseenter(function(){
   var elmID = "#"+this.id+" img";
   $(elmID).fadeOut(300);
});

$('.ngg-gallery-thumbnail-box').mouseleave(function(){
   var elmID = "#"+this.id+" img";
   $(elmID).fadeIn(300);
});

var numbers = $('.ngg-gallery-thumbnail-box').size();

function A(i){
    setInterval(function(){autoSlide(i)}, 7000);
}
A(0);

    function autoSlide(i) {
        var numbers = $('.ngg-gallery-thumbnail-box').size();
        var elmCls = $("#ref").attr("class");
        $(elmCls).fadeIn(300);
        var randNum = Math.floor((Math.random()*numbers)+1);
        var elmClass = ".elm"+randNum+" img";
        $("#ref").attr("class", elmClass);
        $(elmClass).fadeOut(300);
        setInterval(function(){arguments.callee.caller(randNum)}, 7000);
    }
});

我在Firebug的控制台中看到的错误是“TypeError:arguments.callee.caller不是一个函数。我刚刚开始使用jQuery,并且不知道如何解决这个问题。

任何改变代码的帮助,以便它仍然有效,但不会抛出所有这些错误(如果我加载网站并让它在我的浏览器中停留10分钟,我在控制台中有超过10000个错误)非常感谢!

1 个答案:

答案 0 :(得分:4)

setInterval内,arguments可能不是您认为的那样。调用时,每个函数都有自己的arguments数组。运行setInterval时,会调用传递给它的函数,因此arguments用于该函数(匿名函数)。

在这种情况下,我发现您正在尝试使用arguments.callee.caller来获取调用间隔的函数autoSlide。那不行。传递给setInterval的函数是由autoSlide调用的 ,它由浏览器调用。所有autoSlide都是setInterval来电,arguments.callee.callernull

由于你知道函数的名称autoSlide,你可以使用它。

setInterval(function(){
    autoSlide(randNum);
}, 7000);

更新:您确定首先需要setInterval autoSlide吗?您的代码调用A(0),其中autoSlide已调用setInterval。你真的需要两个间隔吗?