2012-04-03 77 views
0

我有一個警告消息元素,我想在2秒後隱藏它。我有一個在頁面加載後運行的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

有沒有真正有效的方法來做到這一點。是不可能修改顯示警報的代碼? – 2012-04-03 02:58:04

+0

我能想到的最好方法是不斷用setInterval或setTimeout檢查它,但這是一個不好的解決方案。最優化將以某種方式掛鉤您需要使用的這些「警報」。 – Kris 2012-04-03 03:07:09

+0

嗨克里斯,這似乎是正確的方向。你可以再詳細一點嗎?提前致謝。 – AdamNYC 2012-04-03 03:40:04

回答

2

這聽起來像你可能想要一個計時器?什麼,你會想要做的是,在功能/代碼顯示的警報給用戶的結束,做這樣的事情:

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

2000年的數字是毫秒,應該意味着在大約2秒計時器創建後,代碼將運行在匿名函數中,然後隱藏警報。

1

我想你想要的東西,像「DOMNodeInserted」事件,但這不是在IE瀏覽器的支持。因此,您可以使用liveQuery來監聽DOM更改。希望這是你正在尋找的東西。

LiveQuery

然後,您可以使用它像這樣聽元素的變化:

$('#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並且您創建一個超時(請參閱上面的Eli Sand的代碼),這會在2秒後刪除該ID。

在我的小提琴教程,我只是用Unix時間戳,我認爲會工作得很好這裏。

+0

你甚至不需要給元素任何獨特的屬性。如果元素是在函數中無精打采創建的,則只需將其分配給一個變量,然後就可以在定時器觸發的匿名函數中引用該變量。例如:'var elem = $('

some alert
');'然後像'$(elem).remove();'那樣在你的計時器中引用'elem'。 – 2012-04-03 22:43:18