jQuery延迟使用append()

时间:2012-06-18 15:01:48

标签: javascript jquery

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

我的代码:

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

在此代码中,我同时打印了'testtest',delay被忽略。

3 个答案:

答案 0 :(得分:23)

这是因为delay(2000)默认将fx队列排队,append()永远不会成为其中的一部分。

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

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

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

但是,我同意@ ascii-lime的评论;我希望客户有更多机会了解setTimeout,因为它是JavaScript的基本组成部分,与delay()不同,后者会混淆许多用户(来自StackOverflow上提出的问题的经验)。

FWIW,这个问题促使我写a blog post关于delay()的用法;它比这个答案更详细,对其他人来说可能是更好的阅读。

答案 1 :(得分:3)

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

来自the doc

  

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

(如果你没有使用fx队列,你必须使用自定义队列)

在这种情况下使用setTimeout。

答案 2 :(得分:1)

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