2012-04-03 21 views
0

2秒後に非表示にしたいalert-message要素があります。ページの読み込み後に実行されるjavascriptがあり、ページが読み込まれたときに警告が表示されます。jQueryでhtml要素の変更を検出する方法

ただし、ページが読み込まれた後にアラートが表示され、これらのアラートはそのまま残ります。アラートメッセージ要素が再び表示された場合、2秒後にそれを非表示にするための変更をどのように確認できますか?

この私が最初の警告を非表示にするために使用コード:

$(document).ready(function(){ 
    var hide_delay = 4000; // starting timeout before first message is hidden 
    var hide_next = 800; // time in mS to wait before hiding next message 
    $(".alert-message").slideDown().each(function(index,el) { 
     window.setTimeout(function(){ 
     $(el).slideUp(); // hide the message 
     }, hide_delay + hide_next*index); 
    }); 

ありがとうございました。

+3

本当に効率的な方法はありません。アラートを示すコードを変更することはできませんか? –

+0

私が考えることができる最善の方法は、常にsetIntervalまたはsetTimeoutでチェックしていますが、それは悪い解決策です。最も最適なのは、どうにかしてこれらの「アラート」に取り組む必要があります。 – Kris

+0

こんにちはクリス、それは正しい方向のようです。より具体的になりますか?前もって感謝します。 – AdamNYC

答えて

2

タイマーが必要なように私に聞こえるのですか?

var timer = window.setTimeout(function() { 
    // code here to hide the alert 
}, 2000); 

番号2000はミリ秒単位であり、その時およそ2秒を意味しなければならない:何をしたいと思うことは、ユーザーに警告を表示する機能/コードの最後に、このようなものですかタイマが作成された後、コードは匿名関数で実行され、警告が非表示になります。

1

"DOMNodeInserted"イベントのようなものが欲しいと思いますが、これはIEではサポートされていません。したがって、代わりにliveQueryを使用してDOMの変更を聞くことができます。うまくいけば、これはあなたが探しているものです。

$('#elementToListenTo').livequery(function(){ 
    // If $(this) element has been changed, perform things below. 
    var timeout = window.setTimeout(function(){ 
     // Perform a task after 2 seconds 
     $(".alert-message").slideDown(); 
    },2000); 
}); 
1

はここでフィドル考えです:http://jsfiddle.net/ekr8v/4/

アラートを作成するとき、あなたはそれにIDを与えるあなたは、その要素の変化を聞くために、このようにそれを使用することができます

LiveQuery

2秒後にそのIDを削除するタイムアウトを作成します(上記のEli Sandのコードを参照)。

私のフィドルのチュートリアルでは、ここでうまくいくと思うUnixタイムスタンプを使用しました。

+0

要素に一意のプロパティを与える必要はありません。要素が関数内の空白から作成されている場合は、それを変数に代入するだけでよく、タイマーによってトリガーされる無名関数内でその変数を参照することができます。例: 'var elem = $( '

some alert
');'あなたのタイマーの中で '$(elem).remove();'のような 'elem'を参照してください。 –

関連する問題