2

我希望有人可以帮助我纠正我在使用自定义脚本时遇到的一些问题。我接管了一个站点的管理,下面的代码似乎有问题:

/*  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 个错误)将不胜感激!

4

1 回答 1

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),它已经调用autoSlidesetInterval。你真的需要两个间隔吗?

于 2013-06-27T16:19:03.693 回答