2011-08-26 49 views
7

鑑於following code.fadeOut()在一個隱藏的元素 - 可能的錯誤?

<div class='hotel_photo_select'> 
    Hello 
</div> 

<div class='itsHidden' style='display:none'> 
    <div class='hotel_photo_select'> 
     Hello 
    </div> 
</div> 

和:

$('.hotel_photo_select').fadeOut(300); 
$('.itsHidden').show(); 

我希望雙方.hotel_photo_select的div被隱藏。但是,當我展示容器時,第二個不會隱藏。

這是一個jQuery的bug?每個元素都應該在fadeOut()之後隱藏。

我認爲唯一的解決方案將是這樣的:

$('.hotel_photo_select').fadeOut(300, function() { 
    $(this).hide(); 
}); 
$('.itsHidden').show(); 

我覺得這是小於優雅。

+0

我不明白你的問題。你寫'$('。itsHidden')。show();'當然會顯示一個'Hello'。請澄清一下你的問題。 – Jules

+0

在我看來,$('。hotel_photo_select')。fadeOut(300);應該淡化每一個元素。實際上,隱藏容器內的一個不會隱藏。這是queston,但噓解決神祕:) – markzzz

回答

2

技術上,對於這種類型的方法,你需要使用'。每()'。然後還可以添加一個檢查點,在那裏我們確定父代是否可見,如果它不可見,那麼我們使其可見。

但是,使父項可見,可能會對佈局產生負面影響,YES。但沒有更好的方法來做到這一點,因此你應該避免這種情況。

活生生的例子:http://jsfiddle.net/QMSzg/21/

$('.hotel_photo_select').each(function() { 
    var this_parent = $(this).parent('div'); 
    if (this_parent.is(':hidden')) { 
     this_parent.show(); 
    } 
    $(this).fadeOut(500); 
}); 
1

jQuery.fadeOut將元素從其當前狀態轉換爲您要採用的狀態,在這種情況下隱藏。如果元素已被隱藏(與第二次發生一樣),jQuery不需要執行任何操作。你可以做的是專門設置的CSS顯示爲無:

$('.itsHidden .hotel_photo_select').css('display','none'); 
8

前面已經提到的「噓」,因爲第二個「你好」 div的當前狀態爲「隱藏」 jQuery.fadeOut()將不適用任何動畫就可以了。

而不是說「淡出爲我」,你需要說「使不透明度動畫爲0」。在這種情況下,jQuery不會在乎你的元素是否可見。它會做的工作:

$('.hotel_photo_select').animate({opacity:0}, 3000); 

看到在這裏:http://jsfiddle.net/QMSzg/20/

+1

這裏要小心的一件事是,在fadeOut結束時,元素被設置爲顯示:沒有我相信。爲了模仿你需要一個完整的處理程序,然後將元素設置爲不顯示任何內容(取決於之後你在做什麼)。 – Alex

+0

是的,謝謝你提到這個。 –

1

地方節目()的淡出()之前

$('.itsHidden').show(); 
$('.hotel_photo_select').fadeOut(300); 
1

我有同樣的問題。 我的解決辦法是隱藏元素作爲一個回調函數:

$('.hotel_photo_select').fadeOut(300, function(){ 
    $('.hotel_photo_select').hide(); 
}); 

這樣,如果該元素是隱藏的,回調將馬上調用。