jQuery 和 setTimeout

发布于 2024-11-30 10:44:44 字数 228 浏览 2 评论 0原文

我有以下代码:

            jQuery(document).ready(function()
            {
setTimeout($('#loading').fadeIn('slow'), 9999);
            });

它应该在 9999 毫秒后慢慢淡入加载元素,但它却立即淡入……为什么?

任何人都可以帮忙。谢谢

I have the following code:

            jQuery(document).ready(function()
            {
setTimeout($('#loading').fadeIn('slow'), 9999);
            });

which should slowly fade in the loading element after 9999 miliseconds but instead it fades it in straight away... why?

Can anyone help. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怎会甘心 2024-12-07 10:44:44

为了做你想做的事,你必须将 jQuery 的东西包装在一个匿名函数中:

setTimeout(function () {
    $('#loading').fadeIn('slow');
}, 9999);

必须告诉 setTimeout 函数(以及 setInterval)在之后要做什么延迟。只有三种方法可以告诉它要做什么:

  1. 使用必须eval的 JavaScript 字符串:

    setTimeout('$("#loading").fadeIn("慢")', 9999);
    

    因为这使用了eval,并且可能变得非常难看,所以不推荐。但它工作正常。

  2. 使用函数参考

    var test = function () {
        $('#loading').fadeIn('慢');
    };
    
    setTimeout(测试, 9999);
    

    请注意,我没有执行setTimeout(test(), 9999)。我只是给了它函数的名称。

  3. 使用您即时构造的匿名函数,这就是我在上面的第一个代码块中所做的。

如果您尝试执行类似 setTimeout(test(), 9999) 的操作,那么浏览器将首先执行 test(),然后给出setTimeout返回值。所以在你的尝试中......

setTimeout($('#loading').fadeIn('slow'), 9999);

浏览器正在执行 jQuery 的东西,淡入 #loading 元素,然后将 fadeIn 返回给 setTimeout。碰巧,fadeIn 函数返回一个 jQuery 对象。但 setTimeout 不知道如何处理对象,因此在 9999 毫秒的延迟后什么也不会发生。

In order to do what you want, you have to wrap the jQuery stuff in an anonymous function:

setTimeout(function () {
    $('#loading').fadeIn('slow');
}, 9999);

The setTimeout function (and setInterval as well) must be told what to do after the delay. And there are only three ways to tell it what to do:

  1. With a string of JavaScript that it must eval:

    setTimeout('$("#loading").fadeIn("slow")', 9999);
    

    Because this uses eval, and can get pretty ugly, it's not recommended. But it works fine.

  2. With a function reference:

    var test = function () {
        $('#loading').fadeIn('slow');
    };
    
    setTimeout(test, 9999);
    

    Note that I didn't do setTimeout(test(), 9999). I just gave it the name of the function.

  3. With an anonymous function that you construct on the fly, which is what I did in the first code block above.

If you try to do something like setTimeout(test(), 9999), then the browser will first execute test(), and then give the return value to setTimeout. So in your attempt...

setTimeout($('#loading').fadeIn('slow'), 9999);

...the browser was executing that jQuery stuff, fading in the #loading element, and then giving whatever fadeIn returns to setTimeout. As it happens, the fadeIn function returns a jQuery object. But setTimeout doesn't know what to do with objects, so nothing would happen after the 9999 millisecond delay.

赤濁 2024-12-07 10:44:44

settimeout() 函数来自 javascript,并接受一个函数作为参数。

最好的选择是使用 jQuery 的内置 delay() 函数:

 jQuery(document).ready(function()
 {
   $('#loading').delay(9999).fadeIn('slow');
 });

更多信息/示例:http://api.jquery。 com/延迟/

The settimeout() function is from javascript and takes a function as an argument.

Best choice would be to use jQuery's builtin delay() function:

 jQuery(document).ready(function()
 {
   $('#loading').delay(9999).fadeIn('slow');
 });

More information/exemples: http://api.jquery.com/delay/

温柔嚣张 2024-12-07 10:44:44

setTimeout 接受一个函数作为第一个参数 - 您当前正在传递一个 jQuery 选择器,它会立即被评估并执行 fadeIn 操作。相反,传入一个匿名函数:

setTimeout(function() {
 $('#loading').fadeIn('slow'), 9999);
}, 9999);

setTimeout accepts a function as first parameter - you are currently passing a jQuery selector, which immediately gets evaluated which executes the fadeIn operation. Instead pass in an anonymous function:

setTimeout(function() {
 $('#loading').fadeIn('slow'), 9999);
}, 9999);
著墨染雨君画夕 2024-12-07 10:44:44

您还可以使用 jQuery 的 .delay()。

$('#loading').delay(9999).fadeIn('慢');

You can also use jQuery's .delay().

$('#loading').delay(9999).fadeIn('slow');

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文