jQuery和setTimeout

时间:2011-08-16 22:36:20

标签: jquery settimeout

我有以下代码:

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

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

任何人都可以提供帮助。感谢

4 个答案:

答案 0 :(得分:9)

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

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

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

  1. 使用JavaScript字符串时,必须eval

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

    因为它使用eval,并且可能变得非常难看,所以不建议使用。但它运作正常。

  2. 使用功能参考

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

    请注意,我没有setTimeout(test(), 9999)。我只是给了它功能的名称。

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

  4. 如果您尝试执行setTimeout(test(), 9999)之类的操作,则浏览器将首先执行test(),然后将返回值提供给{ {1}}。所以在你的尝试中...

    setTimeout

    ...浏览器正在执行jQuery内容,淡入setTimeout($('#loading').fadeIn('slow'), 9999); 元素,然后将#loading返回给fadeIn。碰巧,setTimeout函数返回一个jQuery对象。但是setTimeout不知道如何处理对象,所以在9999毫秒延迟之后不会发生任何事情。

答案 1 :(得分:4)

settimeout()函数来自javascript并将函数作为参数。

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

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

更多信息/示例:http://api.jquery.com/delay/

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

$( '#装载')延迟(9999).fadeIn( '慢');