jQuery延迟使用append()

我不能使jQuery的延迟function与append函数一起使用。 怎么了? 有没有办法让它发挥作用? 我想避免直接使用setTimeout让客户更容易理解,他们将自己维护,没有任何经验。

我的代码:

 $('#chatwindow').append('test').delay(2000).append('test'); 

在这段代码中,我同时打印’testtest’,忽略delay

这是因为delay(2000)默认对fx队列进行排队,而append()从不是其中的一部分。

相反,您可以使用queue()函数专门对其上的append()进行queue()

 $('#chatwindow').append('test').delay(2000).queue(function (next) { $(this).append('test'); next(); }); 

你可以看到这个工作的一个例子; http://jsfiddle.net/mj8qC/

但是,我同意@ ascii-lime的评论; 我希望客户有更多机会了解setTimeout因为它是JavaScript的基本组成部分,而不像delay() ,这会让许多用户感到困惑(根据StackOverflow上提出的问题的经验)。

FWIW,这个问题引发了我写一篇关于delay()的使用的博客文章 ; 它比这个答案更详细,可能会为其他人进一步阅读。

delay()是一个棘手的函数,不能与任何东西一起使用:它主要用于效果(它立即返回,它不会阻止javascript执行流程)。

从文档 :

它可以与标准效果队列一起使用,也可以与自定义队列一起使用

(因此,如果您不使用fx队列,则必须使用自定义队列)

在这种情况下使用setTimeout。

是。 延迟返回是立即的。 代码中没有任何内容表明reurn应该等待。 你需要使用setTimeout让引擎等待..