2011-07-18 26 views
0

我有一個jQuery的聲明如下:執行回調即使jQuery的語句失敗

$('.panel.col2, .panel.col3').fadeOut('fast', function(){ 
    //SOME CODE 
}); 

的問題是,這些元素並不總是存在的,我需要,無論是執行的成功回調回調所屬的聲明。有沒有解決這個問題的方法?

+5

聽起來這是不是一個真正的回調呢? –

+0

重點在於它需要在刪除元素後始終執行。 – nkcmr

回答

1

嘗試這樣:

function myCallback(){ 
    //SOME CODE 
} 

if($('.panel.col2, .panel.col3').length>0){ 

    $('.panel.col2, .panel.col3').fadeOut('fast', function(){ 
     myCallback(); 
    }); 
} else { 
    myCallback(); 
} 
+0

這是一個更有組織。這就是爲什麼我選擇它作爲anaswer。 – nkcmr

+1

@sightofnick ...這實際上效率較低,因爲在相同的代碼塊中多次使用相同的jQuery選擇器會導致額外的循環。簡單地將jQuery對象存儲在變量中然後使用變量會更有效率。例如:var mypanelelement = $('。panel.col2,.panel.col3');現在您可以使用變量mypanelelement而不是強制jQuery再次搜索元素。 –

+0

@John Hartsock:當然你是對的,但我也發現代碼中存在弱點 - 只有在文檔被加載時才定義函數,而且這個代碼可以在更早的時候加載。當然取決於函數內部的代碼的可擴展性。無論如何,這是表演踢。附:是的,我應該把所有其他文件包裝在文件中。我知道 :)。 – avall

1

這聽起來像你想要一些代碼運行在回調fadeOut和外面,如果他們沒有淡出的要素。這是一個想法,但我不知道你想要做什麼的背景。

$(document).ready (function() { 
    var panelElement = $('.panel.col2, .panel.col3'); 
    var fadeOutCallBack = function(){ 
    //SOME CODE 
    }; 
    panelElement.fadeOut('fast', fadeOutCallBack); 
    if (panelElement.length == 0) { 
    fadeOutCallBack(); 
    } 
});