2013-01-22 53 views
-1

所以我有這兩段代碼。在setTimeout事件中使用live()

$(".hideMessage").live("click", function(event) { 
    $('.messageSuccess').hide("slow"); 
    return false; 
}); 

setTimeout(function(){ 
    $(".messageSuccess").hide("slow") 
}, 10000); 

基本上第一段隱藏.messageSuccess點擊.hideMessage時,並使用live()所以,如果我有直通AJAX事後產生的任何.messageSuccess,我仍然可以達到他們。

如果用戶在10秒範圍內沒有點擊.hideMessage鏈接,則第二段隱藏.messageSuccess。問題是,我如何在第二段中使用live()以便我可以控制AJAX生成的.messageSuccess

+3

您應該使用'on()'事件。 http://api.jquery.com/on/ –

+0

不完全知道你在做什麼,但如果你正在執行一個ajax請求並希望在請求完成後隱藏這些元素,你可以使用ajax請求的成功或完成回調?很難說沒有看到ajax請求的代碼。 – Nope

+0

@FrançoisWahl在下面看到我的評論 是的,這就是我現在正在做的事情......但我不想每次都在響應中嵌入setTimeout代碼,我只想做一次 - 就像我對待第一行使用live() – user1735943

回答

0

無論何時添加新的.messageSuccess元素以設置創建時的超時時間,您都需要知道。最好的選擇是修改您的腳本以在添加新元素時設置超時。但是,如果你不能這樣做(例如你不能控制的第三方腳本),那麼你需要設置一個輪詢間隔來檢查新元素的存在。

例如:

setInterval(function(){ 
    $('div.messageSuccess').each(function(){ 
     var $this = $(this); 
     if ($this.data('hideScheduled')) 
      return; 
     $this.data('hideScheduled', true); 
     setTimeout(function(toHide){ toHide.hide('slow'); }, 10000, $this); 
    }); 
}, 2000); 

這個腳本會自動隱藏任何新div.messageSuccess元素10-12秒後,便開始存在。

+0

@N Rohler 我的問題是,如果在加載頁面(通過AJAX調用)之後生成.messageSuccess,那麼如果我不用live()綁定它,我無法控制它。我做了第一行,但我不知道如何做第二行。 – user1735943

+0

我不確定你是否閱讀了我的答案;).messageSuccess是如何形成的? –

+0

它是作爲對$ .get(ajax)調用的響應而生成的。我對PHP文件進行$ .get(ajax)調用=>運行查詢=>在頁面中生成.messageSuccess(不重新加載)。 – user1735943

0

您不需要,因爲$(".messageSuccess")會選擇當前DOM中的所有.messageSuccess元素,而不管它們是否由AJAX添加。

在不相干的筆記上,如果您使用jQuery 1.7+更新.live.on