2012-06-18 82 views
4

我无法让jQuery的延迟功能与append函数一起使用。哪里不对?有没有办法让它工作?我想避免直接使用setTimeout,以便让客户更容易遵循,而且客户将自己维护,无需任何经验。jQuery延迟使用append()

我的代码: 'TESTTEST' 印在同一时间

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

在这段代码中,我得到的,delay被忽略。

+1

你试图追加两次测试吗? –

+0

是的,测试是一个字符串,它应该被添加两次,你可以用任何你想要的文本替换它。 –

+1

你可以在第一个地方搜索:) - http://stackoverflow.com/questions/4544126/jquery-delay-not-working – Rifat

回答

22

这是因为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();它比这个答案更详细,并且可能是对其他人更好的进一步阅读。

+3

虽然这里有几个答案,展示了如何使用jquery中的队列是如此巨大的信息。绝对是最好的答案。 – Ohgodwhy

+2

+1 append默认情况下不排队,它会立即执行,因为它不用于动画。这会将其添加到队列中。对于OP的客户来说,这比“setTimeout”更容易理解,但这个答案绝对是最有用的。 – Paulpro

+0

真棒回答马特,一个很大的大谢谢你! –

3

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

the doc

它可以使用标准的动画队列或定制队列使用

(所以你必须使用自定义的队列中,如果你不使用FX队列)

在这种情况下使用setTimeout。

1

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