Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 for循环中的回调函数?_Javascript_Jquery_For Loop_Callback - Fatal编程技术网

Javascript for循环中的回调函数?

Javascript for循环中的回调函数?,javascript,jquery,for-loop,callback,Javascript,Jquery,For Loop,Callback,在下面的for循环中,如何让函数在所有淡出之后运行 我需要做的是淡出任何可见的东西,然后淡出一个特定的对象。由于样式要求,我的topnav和dropdown nav使用不同的uls,这就是为什么事情很棘手的原因 我还不太擅长写我自己的脚本,所以我(希望)错过了一些基本的东西 我尝试过用函数包装东西,但这似乎会弄乱变量的作用域,把我不理解的东西搞砸了 谢谢你的帮助 $('.ksddtop').on('mouseenter', function(){ var ddtop = $(this).

在下面的for循环中,如何让函数在所有淡出之后运行

我需要做的是淡出任何可见的东西,然后淡出一个特定的对象。由于样式要求,我的topnav和dropdown nav使用不同的uls,这就是为什么事情很棘手的原因

我还不太擅长写我自己的脚本,所以我(希望)错过了一些基本的东西

我尝试过用函数包装东西,但这似乎会弄乱变量的作用域,把我不理解的东西搞砸了

谢谢你的帮助

$('.ksddtop').on('mouseenter', function(){
    var ddtop = $(this).text();
    var dd = $('.' + ddtop);
    $('.ksddwrap').fadeIn();
    $(dd).fadeIn();

    var ksdds = $('.ksdd');
    for(var i = 0; i < ksdds.length; i++) {
        var ksdd = ksdds[i];
        if (! $(ksdd).hasClass(ddtop) ){
            $(ksdd).fadeOut();
        }
    }
}); 
$('.ksddtop')。在('mouseenter',function()上{
var ddtop=$(this.text();
变量dd=$('.'+ddtop);
$('.ksddwrap').fadeIn();
$(dd.fadeIn();
var ksdds=$('.ksdd');
对于(变量i=0;i
而不是:

var ksdds = $('.ksdd');
for(var i = 0; i < ksdds.length; i++) {
    var ksdd = ksdds[i];
    if (! $(ksdd).hasClass(ddtop) ){
        $(ksdd).fadeOut();
    }
}

如果我了解以下要求,这应该可以做到:

$('.ksdd:not(' + ddtop + ')').fadeOut().promise().done(function(){
    // all done fading!
});
淡出所有没有
ddtop
类的
ksdd
元素,然后在它们都完成动画制作后执行一些操作

更多信息:

在jQuery集合上调用
.promise
将为您提供一个promise对象,该对象将在元素集合上的所有动画完成时解析。这包括排队的动画


如果您将回调函数直接传递给
.fadeOut()
,则每个元素都将得到回调,而不是在它们全部完成后得到回调。

是!这个很好用!你能解释一下为什么会这样吗?promise()函数是什么(现在查看jquery文档…)?谢谢你的帮助!谢谢你的补充信息!承诺()正是我所需要的!很高兴现在能把它放在工具箱里!
$('.ksdd:not(' + ddtop + ')').fadeOut().promise().done(function(){
    // all done fading!
});