2012-12-19 25 views
0

這是這個職位的延續 - :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功能之前,創建分頁。

+4

看看了'fadeIn'和'的回調參數fadeOut'方法。 http://api.jquery.com/fadeOut/ – elclanrs

回答

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 
}); 
+0

這個fadeOut方法有8個項目,我只想在它的最後運行代碼?因爲我想將jPages腳本實現爲所有列表項。 –

2

有一個在.fadeIn()一個參數,需要的照顧。

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

}); 
+0

如果使用此fadeOut方法有8個項目會怎麼樣,我只想在其末尾運行代碼?因爲我想將jPages腳本實現爲所有列表項。 –

+0

@XavianTracy我不確定你的意思。你的意思是你想讓這些項目相互淡化並且表現得好像它們是「排隊」的,或者你的意思是說你只希望在所有8個都消失而不是8個單獨的時間之後,只讓回調運行一次? – Marty

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')); 

    }); 

});