我希望有人可以帮助我纠正我在使用自定义脚本时遇到的一些问题。我接管了一个网站的管理,以下代码似乎有问题:
/* 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 个错误)不胜感激!
最佳答案
在setInterval
内部,arguments
可能不是你想象的那样。调用时,每个函数都有自己的参数数组。当 setInterval
运行时,传递给它的函数被调用,因此 arguments
用于该函数(匿名函数)。
我发现您正在尝试使用 arguments.callee.caller
来获取调用间隔的函数,在本例中为 autoSlide
。那是行不通的。传递给 setInterval
的函数不是由 autoSlide
调用,而是由浏览器调用。 autoSlide
所做的只是调用 setInterval
,因此 arguments.callee.caller
为 null
。
既然您知道函数的名称,autoSlide
,您就可以使用它。
setInterval(function(){
autoSlide(randNum);
}, 7000);
更新:您确定首先需要在 autoSlide
中使用 setInterval
吗?您的代码调用 A(0)
,它已使用 setInterval
调用 autoSlide
。您真的需要两个间隔吗?
关于jquery - TypeError : arguments. callee.caller 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348128/