8

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

我的代码:

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

在这段代码中,我同时打印了“testtest”,delay被忽略了。

4

3 回答 3

26

这是因为默认情况下delay(2000)对队列进行排队,而该队列从不属于其中的一部分。fxappend()

相反,您可以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();它比这个答案更详细,对其他人来说可能是很好的进一步阅读。

于 2012-06-18T15:04:28.717 回答
3

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

文档

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

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

在这种情况下使用 setTimeout。

于 2012-06-18T15:04:08.043 回答
1

是的。从延迟中恢复是立竿见影的。您的代码中没有任何内容表明应该等待。您需要使用 setTimeout 让引擎等待..

于 2012-06-18T15:04:49.370 回答