等到某些代码运行

时间:2012-12-19 05:54:50

标签: javascript jquery

这是此帖的延续 - :visible selector issue

无论如何,我想知道在运行新的代码行之前是否有办法检测特定代码段是否运行,直到它完成。

例如,

if(filterVal == 'all') {  
    jQuery('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');  
} else {  
    jQuery('ul#portfolio li').each(function() {  
        if(!jQuery(this).hasClass(filterVal)) {  
            jQuery(this).fadeOut('normal').addClass('hidden');  
        } else {  
            jQuery(this).fadeIn('slow').removeClass('hidden');  
        }  
    });  
} 

我想要做的是确保在触发jPages函数创建分页之前,所有list-item元素都成功地成功淡入(显示:块)和fadeOut(显示:无)。

3 个答案:

答案 0 :(得分:2)

.fadeIn()中有一个参数可以解决这个问题。

$('ul#portfolio li.hidden').fadeIn('slow', function()
{
    // Fade has finished, continue here.
    //
    //

});

答案 1 :(得分:1)

给它一个回调函数。尝试:

jQuery(this).fadeOut('normal', function(){
    $(this).addClass('hidden'); 
})

如果您必须多次执行此操作,请使用:

jQuery('ul#portfolio li').each(function() {  
    if(!jQuery(this).hasClass(filterVal)) {  
        jQuery(this).addClass('hidden');  
    } else {  
        jQuery(this).removeClass('hidden');  
    }  
});  

$('ul#portfolio li.hidden').fadeOut('normal', function(){
    //Finished
});
$('ul#portfolio li:not("hidden")').fadeIn('slow', function(){
    //Finished
});

答案 2 :(得分:0)

所以我想我发现了如何使用.promise()

来做到这一点

我的代码看起来像这样:

jQuery('ul#portfolio li').promise().done(function()
{
    jQuery('ul#portfolio li').each(function()
    {
        console.log(jQuery(this).attr('class') + '-' + jQuery(this).css('display'));

    });

});