2016-01-29 86 views
3

如果點擊功能中陳述我有以下幾點:如果語句的工作控制檯,而不是在源

$('#rent-link').on('click', function() { 
    $('.house-card:not(.sold)').fadeIn('fast'); 
    $('.for-sale').fadeOut('fast'); 
    $('.rental').fadeIn('fast'); 
    $('.sold').fadeOut('fast'); 
    $('.comm').fadeOut('fast'); 
    if ($('.house-card:visible').length == 0) { 
    $('#no-results').show(); 
    } 
    return false; 
}); 

所有的代碼被包裝在一個文檔準備功能,使不能成爲問題。我不知道爲什麼當爲這個if語句設置參數來解決真的時候,它總是會解決錯誤。當我點擊#出租鏈接,然後在控制檯中單獨運行if語句時,它會解析爲真。

感謝您的幫助。

編輯︰

我用settimeout函數更新我的代碼,它的工作。你們是對的,謝謝!

這裏是工作代碼:

$('#rent-link').on('click', function() { 
      $('.house-card:not(.sold)').fadeIn('fast'); 
      $('.for-sale').fadeOut('fast'); 
      $('.rental').fadeIn('fast'); 
      $('.sold').fadeOut('fast'); 
      $('.comm').fadeOut('fast'); 
      setTimeout(function() { 
       if ($('.house-card:visible').length === 0) { 
        $('#no-results').show(); 
       } 
      }, 500); 
      return false; 
     }); 
+2

您是否能夠在[fiddle](https://jsfiddle.net)中複製該問題? – Yass

+0

也許'fadeOut('fast')'速度不夠快,也就是說,在所有'.house-cards'變得不可見之前,你正在檢查。 – Teemu

回答

3

它看起來可能存在可能還有一些可見.house-card元素if語句運行時。

fadeInfadeOut函數是異步的,使用一系列間隔的前最後的元素設置爲hidden淡出的不透明度。在函數完成並實際隱藏元素之前,可能會執行if語句。

當您單擊按鈕,然後在運行控制檯的說法,你很可能會超過半秒淡入淡出功能,實際運行命令之前需要更長的時間,這樣的元素會在運行命令之前已隱藏。

爲確保在動畫完成後if語句正在運行,您可以使用回調函數,如http://api.jquery.com/fadeout/所述。例如:

$('.sold').fadeOut('fast', function() { 
    if ($('.house-card:visible').length == 0) { 
    $('#no-results').show(); 
    } 
}); 

請注意,這隻會確保沒有.house-card.sold:visible元素。我不確定.comm.for-sale也是.house-card元素,但如果它們是,它可能會比這更多一點,以確保它們都不可見。

+0

謝謝! @jonhopkins我一直盯着這太久,甚至沒有跨過我的腦海! – Jhauge

+0

@Jauge,我已經編輯了答案,解釋了讓if語句按照你期望的方式運行的可能方式,但是你似乎用'setTimeout'代碼打敗了我:) – jonhopkins