2013-01-04 14 views
7

カスタムポップアップメッセージを表示しようとしています。表示されるメッセージは、5秒間ユーザーに表示されてから消えます。これはうまく動作しますが、イベントが複数回トリガされ、タイムアウトが既に実行されている場合はすぐにメッセージが消えます。JQueryポップアップメッセージ

My機能、これまで...

function showMessage(message) { 
    $(".messageText").text(message); 

    $(".message").fadeIn("slow");  

    closeBox = function(){ 
     $(".message").fadeOut("slow");  
    } 

    clearInterval(closeBox); 
    setInterval(closeBox, 5000); 
} 

感謝

+0

showMessageを呼び出す場所にコードを含めることはできますか? –

+0

変数を追加して、メッセージボックスの状態を保存することができます。ボックスが表示されている場合は、機能を実行しないでください。 – Raptor

+1

フェードアウト機能自体でタイムアウトを指定する方法は?それはあなたのために働くでしょうか? –

答えて

8

はこれを試してみてください:

var interval; 

function showMessage(message) { 
    $(".messageText").text(message); 

    $(".message").fadeIn("slow"); 
    if(interval){ // If a interval is set. 
     clearInterval(interval); 
    } 
    interval = setInterval(closeBox, 5000); 
} 

function closeBox(){ 
    $(".message").fadeOut("slow");  
} 

あなたは、変数へsetIntervalの復帰を割り当てる必要があります。このハンドルを使用して、間隔をclearintervalで終了することができます。

また、私はshowMessage機能のうち、closeBox機能を引っ張っ(あなたが唯一の間隔ハンドルによって、関数によって間隔をクリアすることはできません)、それはそれをshowMessageが呼び出されるたびに宣言する必要はありません。

+0

と反転は間隔でなければなりません。:) – bipen

+0

@bipen:おっと、編集しました。 – Cerbrus

+1

jQueryのdelay()は非常にこのようなシナリオ用です。 –

4

jQuery遅延の使用についてはどうですか?

サンプル:

$("#container").fadeIn().delay(amoutOfTimeInMiliseconds).fadeOut(); 

あなたの機能:

function showMessage(message) { 
    $(".messageText").text(message); 

    $(".message").fadeIn("slow").delay(5000).fadeOut("slow");  
} 

それが動作するはずです...よろしく。

+0

+1は、問題を解決するためにjQueryの方法を使用して – Alex

関連する問題