2012-12-09 37 views
1

我有形式在哪裏輸入。輸入的答案和可見性可能會影響位於其下方的其他輸入的可見性。jQuery隱藏 - 如何知道元素是否已經開始隱藏但仍然可見?

我有一些javascript函數,當某些輸入的值發生變化時會調用它。該功能正在處理每個輸入並檢查其可見性和答案。根據這些信息,它可能隱藏或顯示一些其他輸入。一個循環就足夠了,因爲元素的可見性不會影響以前元素的可見性。

$(".test_this").each(function() { 
    var id_number = $(this).attr("id").split("_")[1]; 
    var tested_id = parseInt(id_number) + 1; 
    if ($(this).find("input:checked").val() != 1 || $(this).is(":hidden")) { 
     if ($("#element_"+tested_id).is(":visible")) { 
      $("#element_"+tested_id).hide(); 
     } 
    } 
    else { 
     if ($("#element_"+tested_id).is(":hidden")) { 
      $("#element_"+tested_id).show(500); 
     }      
    }     
}); 

我的代碼運行良好,但我想添加持續時間來隱藏功能,但後來我的可見性檢查失敗。是否有可能知道某個元素是否已經開始隱藏但仍然可見?

我不想使用回調函數,因爲它在延遲後執行。其次,我不想改變隱藏輸入的值。一個解決方案是添加一些額外的類,可以檢查存在,但有沒有更好的方法來做到這一點?

我的代碼在小提琴:http://jsfiddle.net/nmUPj/3/

對於進一步的信息,我實際的代碼要複雜得多,並獲取有關從MySQL形式和產生形式和使用PHP的javascript代碼信息。

+2

如果'隱藏()'使用沒有持續時間,它不是異步的,並且沒有「開始隱藏」,它是隱藏的或不是。如果它是動畫的,它將會......等待它......動畫 - > if($(element).is(':animated')){...}。你可能要找的只是給元素添加一個類,然後檢查這個類,因爲如果它是動畫或不是它不重要。 – adeneo

+0

@adeneo感謝您的評論。也許增加新班是我的最佳選擇。 –

回答

1

您可以檢查元素仍然由動畫:

$("#element_"+tested_id).is(":animated") 

或者,你可以給一個回調函數,以你的節目(),

$("#element_"+tested_id).show(5000, function(){ 
    alert('animation completed'); 
}); 
+0

謝謝,我不知道,但仍然沒有解決我的問題,因爲那時我不知道它是因爲隱藏還是放映而生氣。 –