2011-03-08 4 views
0

私は動的にこのコード行でフラッシュメッセージを含むdiv要素にCSSクラスを追加します。私が追加したときに、それが実行されるように動的なjQueryのCSSのコーナーケース

$("div#flash_notice").toggleClass('success'); 

のJavaScriptファイルには、私のmicropostビューにありますポスト。ページをリフレッシュせずに2つの投稿を追加する場合を除いて、すべてがうまくいきます。なぜなら、フラッシュメッセージはスタイルを失うため、クラスを削除するために戻ってきます。どうすればこの問題を回避できますか?

+0

それはあなたが何をしたいかによって異なります。あなたは '成功'クラスだけで滞在したいですか? flash_noticeをフラッシュ/点滅/アニメーションして、最新の投稿に適用されたトグルを知ってもらいたいですか?別のクラスに変更しますか?また、idで要素を参照しているため、タグ名の接頭辞を使用する必要はありません。 ( 'div#flash_notice'ではなく' #flash_notice') – Chris

+0

まず、同じidを持つ2つの要素を持つのは間違いです。それにはクラスを使うべきです。ブラウザが機能しなくなったのを見てきました。 – usoban

+0

@Rfvgyhn私は当初アニメーションをやりたいとは思わなかったが、5秒後にメッセージが消えるようにするためにコードが必要となるのは不思議です。 –

答えて

1

は、トグルクラスを使用してはいけません。 addClassを使用して、それはそれを持っていない場合にのみ、そのクラスを追加します。

$("div#flash_notice").addClass('success'); 
0

あなたは、すでにクラスを持っていない要素にクラスを追加することができます

$("div#flash_notice").not('.success').addClass('success'); 
0

他の人が言及したようにあなたが代わりに.addClassメソッドを使用することができます。アニメーションについてコメントをrepsonseでは、このような何かを行うことができます:

var flashNoticeTimeout; 
var fadeOutDelay = 1000; 

function onPostAdded() { 
    var $flashNotice = $("#flash_notice"); // Get flash_notice element 
    $flashNotice.show().addClass("success"); // Show the flash element and then add the 'success' class. 
               // Need to use .show because the .fadeOut later on will have hidden this element 

    clearTimeout(flashNoticeTimeout);   // Clear any previous timeouts. If the user button adds a post, then adds another post before the element has faded out, this will clear the last timeout so the element isn't hidden before 'fadeOutDelay` 

    flashNoticeTimeout = setTimeout(function() { // Trigger this anon function after 'fadeOutDelay' milliseconds (1000 milliseconds = 1 second) 
     $flashNotice.fadeOut();     // Fade out the element 
    }, fadeOutDelay); 
} 

は、デモ用のfiddleを参照してください。

+0

これについて詳しく説明してください。 –

+0

私はこれを自分のコードにどのように統合するのかはよく分かりません –

+0

説明を参照してください。 – Chris

0

または、より簡単に:。http://jsfiddle.net/LekisS/L2kvP/1/

$( 'のdiv#のflash_notice')ディレイ(1000).fadeOut();

+0

フェードアウトが発生する前にボタンを何回かクリックすると、タイマーがリセットされません。ジャスティン・メルツァーがどうしたらいいのか分かりません。 – Chris

+0

'.delay()'の前に '.clearQueue()'を追加するのはどうですか? –