2012-07-12 75 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