Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有作用域的JQuery命名函数_Javascript_Jquery - Fatal编程技术网

Javascript 具有作用域的JQuery命名函数

Javascript 具有作用域的JQuery命名函数,javascript,jquery,Javascript,Jquery,我需要在页面上的一组相邻div上执行单个函数。我认为这样效果最好: function namedFunction(){ setTimeout(3000); //do animations and such $(this).next().call(namedFunction); } $("#firstdiv").call(namedFunction()); $(document).ready(function() { var $divs = $("div.commo

我需要在页面上的一组相邻div上执行单个函数。我认为这样效果最好:

function namedFunction(){
   setTimeout(3000);
   //do animations and such
   $(this).next().call(namedFunction);

}

$("#firstdiv").call(namedFunction());
$(document).ready(function() {
    var $divs = $("div.commonClass"),
        i = 0;
    function processNextDiv() {
        namedFunction($divs.eq(i));
        i = (i + 1) % $divs.length;
        setTimeout(processNextDiv, 3000);
    }
    processNextDiv();
});
但是我找不到在一个集合范围(firstdiv对象)中任意执行函数的方法,而且我甚至不确定这个范围是否会被正确传递。有什么方法可以做到这一点,还是有更好的方法可以做到这一点?

我想你想要这个:

function namedFunction () {
   this.animate({ ... }, function () {
       namedFunction.call( $( this ).next() );
   });    
}
然后:

namedFunction.call( $('#firstdiv') );
也许是这个

$("#firstdiv").nextAll("div").andSelf().each(function(){
    // this = DIV
});
setTimeout()
函数不会暂停当前执行,它会对您提供的函数的未来执行进行排队。要在页面加载时执行某些操作,请使用文档就绪处理程序

我想你想要这样的东西:

function namedFunction(){
   setTimeout(3000);
   //do animations and such
   $(this).next().call(namedFunction);

}

$("#firstdiv").call(namedFunction());
$(document).ready(function() {
    var $divs = $("div.commonClass"),
        i = 0;
    function processNextDiv() {
        namedFunction($divs.eq(i));
        i = (i + 1) % $divs.length;
        setTimeout(processNextDiv, 3000);
    }
    processNextDiv();
});
这首先选择所有div(我建议通过给它们一个公共类来选择,但您可以按自己喜欢的方式来选择),然后设置一个基于超时的循环,调用
namedFunction()
将当前要处理的div传递给它。那么你可以:

function namedFunction($div) {
    $div.animate(...); // process current div
}
或者,您可以将动画或其他div处理代码直接放入该函数中,具体取决于您是否希望从其他位置调用
namedFunction()


演示:

您打算什么时候打电话?文档何时加载?关于用户操作?我以前从未任意调用过任何函数。我通常有一个原因。哟,你是GNU Linux的粉丝吗?
:)
你以一种伪方式编写了递归函数,即在函数中调用相同的函数,我想我会提到<代码>:)设置超时(3000)在all@Yatrix,当文档加载时,我想在第一个div上调用函数。然后第一个div将在它的下一个div上执行函数,并将其自身放置在div的末尾,这样函数将永远继续(我显示滑动面板),就是这样,非常好,谢谢。不过,我不太确定我是否了解发生了什么,当对分配给'this'变量的JS函数调用'call'时,第一个参数是什么?@user1681515是的。
.call()
方法仅在本机函数上可用,用于显式定义调用的
值。因此,
f()
,和
f.call(x)
,都在调用函数
f
,但后者也定义了该函数调用的
值。“仅在本机函数上可用”-你所说的“本机”是什么意思?@nnnnnnnn标准定义了该术语。简单来说,本机函数是继承自
function.prototype
的函数。因此,本机函数保证具有
.call()
方法。非本机函数不保证具有此方法。