2012-03-21 22 views
2

jQueryを使用して私が作成した「通知」バブルをフェードアウトしています。初めて関数が呼び出されたときはうまくフェードアウトされますが、2回目には "通知"がボディに追加されますが、そこに座ってフェードアウトしません。どんな助けでも大歓迎です。jQuery fadeOut()一度だけ動作します

ここには、呼び出されているJavascriptがあります。

if (pointsCalculated = 1) { 
    $('body').append('<div id="progress">' + pointsCalculated + ' point added to current points...</div>'); 
} 
else { 
    $('body').append('<div id="progress">' + pointsCalculated + ' points added to current points...</div>'); 
} 

//Reset calculator after adding to tracker 
calcReset(); 

    $("#progress").fadeOut(2000); 
+0

同じIDを持つ2番目のdivを追加していて、divが存在するかどうかを確認してfadIn()を使用するか、可視性を変更して内容を編集します。 – CBusBus

+0

なぜ 'if'' else'ステートメントの中で二つの全く同じ操作をしていますか? –

+1

@ RokoC.Buljanは1つのポイントともう1つのポイントを指します – voigtan

答えて

4

はフェードアウト後の要素を削除してください:

$("#progress").fadeOut(2000, function() { $(this).remove(); }); 

さらに詳しい情報:

.remove()
.fadeOut()

+0

これは完全にうまくいった - ありがとう。私はdivを削除することを忘れて、信じられない。 – mattdonders

0

追加するたびにfadeOutイベントを#progress要素に再バインドする必要があります。

0

要素をDOMに追加するときに、追加された要素fadeOutバインディングを再作成する必要があります。このバインドは、追加した直後に作成することができます。これで今すぐ動作するはずです。

0

あなたのコードは、あなたが "進歩" を削除表示されませんので、あなたがしていますおそらく毎回新しいものを追加します。 IDは非常にユニークであるため、コードは2つを見つけて失敗します。

2

Javascriptでは、IDを持つ要素が複数見つかることはありません。また、再度実行するときには、すでに色あせています。

あなたがクラスにIDを変更して表示され、その項目にfadoutを開始するには、アニメーション、およびその完了したら、あなたは多くの.progress

に持っていけないので、それを削除することができないすべての.progressを見つけることができます

$('body').append('<div class="progress">' + pointsCalculated + ' ' + (pointsCalculated === 1 ? 'point' : 'points') + ' added to current points...</div>'); 

//Reset calculator after adding to tracker 
calcReset(); 

$(".progress:visible:not(:animated)").fadeOut(2000, function() { $(this).remove(); }); 

JavaScriptが、変数が値であるかどうかを調べるには、少なくとも2つの "="を使用する必要があることを覚えておいてください。そうでなければ、その変数に値を設定します。

関連する問題