我希望有人可以帮我纠正我在自定义脚本中遇到的一些问题。我接管了网站的管理,以下代码似乎存在问题:
/* 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个错误)非常感谢!
答案 0 :(得分:4)
在setInterval
内,arguments
可能不是您认为的那样。调用时,每个函数都有自己的arguments
数组。运行setInterval
时,会调用传递给它的函数,因此arguments
用于该函数(匿名函数)。
在这种情况下,我发现您正在尝试使用arguments.callee.caller
来获取调用间隔的函数autoSlide
。那不行。传递给setInterval
的函数是由autoSlide
调用的 ,它由浏览器调用。所有autoSlide
都是setInterval
来电,arguments.callee.caller
是null
。
由于你知道函数的名称autoSlide
,你可以使用它。
setInterval(function(){
autoSlide(randNum);
}, 7000);
更新:您确定首先需要setInterval
autoSlide
吗?您的代码调用A(0)
,其中autoSlide
已调用setInterval
。你真的需要两个间隔吗?