我无法使jQuery的延迟功能与append
函数一起使用。怎么了?有没有办法让它发挥作用?我希望避免直接使用setTimeout
让客户更容易理解,他们将自己维护,没有任何经验。
我的代码:
$('#chatwindow').append('test').delay(2000).append('test');
在此代码中,我同时打印了'testtest',delay
被忽略。
答案 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让引擎等待..