2012-07-12 70 views
1

我已經動態創建了一個元素,並希望它在淡入淡出2秒後在Ajax success回調中延遲。爲什麼動態創建的元素不會淡出?

success: function(response){ 
    if(response == "success") 
     $("#main").prepend("<div class='success'>...</div>"); 
    else 
     $("#main").prepend("<div class='error'>"+response+"</div>"); 

    window.setTimeout(
     function(){ 
      $(".success, .error").fadeOut() 
     }, 2000); 
} 

但它不起作用。

+2

是的新元素正在創建並預先成功?即它只是失敗的fadeOut? – 2012-07-12 11:08:03

+0

@RobCowie:它是否被成功創建。 '.fadeOut()'失敗。只是提及我甚至嘗試了Scratchpad(Firefox)來檢查fadeOut()是否會以這種方式工作,但它沒有。 – Shubham 2012-07-12 11:11:40

+0

你可以做一個小提琴(如果它再次運作)?它可能與代碼/ html的其他部分有關。 – 2012-07-12 11:12:44

回答

1

因爲我不清楚還有什麼可能之前或您的Ajax方法後發生的事情,你可以試試這個方法:

success: function(response){ 
    var resultDiv = $('<div />', { text: response }); 
    if(response == "success") 
     resultDiv.addClass('success').prependTo('#main'); 
    else 
     resultDiv.addClass('error').prependTo('#main'); 

    setTimeout(function(){resultDiv.fadeOut()}, 2000); 
} 

我放在一起粗的jsfiddle,似乎也證明了這工作:http://jsfiddle.net/LA7xN/。我顯然沒有使用實際的Ajax調用,而是選擇傳遞一個值來模擬響應。

+1

看起來像fadeOut只是被稱爲_after_新元素被創建後,在成功回調。它應該工作。 – 2012-07-12 11:07:01

+1

@菲爾,在提問者的代碼中沒有事件處理程序,那麼在這種特殊情況下,你的建議如何幫助他? – 2012-07-12 11:07:02

+0

添加了可能從不同角度攻擊問題的代碼示例。 – 2012-07-12 11:14:39

-2

我相信你可以調用

window.setTimeout(
    function(){ 
     $(".success, .error").fadeOut() 
    }, 2000); 

這樣的:

setTimeout('$(".success, .error").fadeOut()',2000);

可能是錯誤的,雖然jsfiddles下來,我懶/約睡覺

+1

傳遞一個字符串到'setTimeout()'涉及'eval()',這通常不是一個好主意。像提問者那樣傳遞一個函數是更好的方法。 – 2012-07-12 11:12:58

+0

,我不知道這是否會工作,我用它從我的動態創建的元素從ajax請求... – segFault 2012-07-12 11:16:48

+0

@FrédéricHamidi謝謝你的提示! – segFault 2012-07-12 11:17:26