2011-08-26 10 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を非表示にすることを期待します。ただし、コンテナを表示すると、2番目のものは表示されません。

これはjQueryのバグですか?すべての要素はfadeOut()の後に隠されるはずです。私はエレガント未満であることがわかり

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

:私は思う

唯一の解決策はこれになります。

+0

私はあなたの質問を理解していません。あなたは '$( '。itsHidden')。show();を書くので、もちろん' Hello'が表示されます。あなたの質問を少し明確にしてください。 – Jules

+0

私の意見では、$( '。hotel_photo_select')。fadeOut(300);すべての要素をfadeOutする必要があります。実際、隠されたコンテナの中のものは隠されていません。それはクエストですが、ブーはミステリーを解決します:) – 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は、要素を現在の状態から採用する状態(この場合は非表示)に変換します。要素が既に隠されている場合(2番目の出現の場合のように)、jQueryはアクションを実行する必要はありません。第二の「ハロー」のdivの現在の状態があるので

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

すでに述べたように「ブー」として、「隠された」jQuery.fadeOut()は適用されません:あなたは何ができるかを具体的に誰にも負けないCSSの表示に設定されていますその上の任意のアニメーション。

「フェードアウトする」というのではなく、「不透明度を0にアニメーションする」と言う必要があります。この場合、jQueryは要素が可視かどうかは気にしません。それが仕事です行います。

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

は、ここでそれを参照してください。http://jsfiddle.net/QMSzg/20/

+1

ここで注意すべき点の1つは、fadeOutの要素が表示されるように設定されていることです。それを真似するには、完全なハンドラに要素を設定して、何も表示しないようにする必要があります。 – Alex

+0

本当に、これに言及いただきありがとうございます。 –

1

フェードアウトする前に、場所のショーを()()

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

私は同じ問題を抱えていました。要素が隠されている場合、コールバックはすぐに呼び出されます

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

この方法: 私のソリューションは、コールバック関数としての要素を非表示にすることでした。

関連する問題