jQuery和setTimeout

我有以下代码:

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

它应该在9999毫秒后慢慢淡入加载元件,但它会直接淡化它…为什么?

谁能帮忙。 谢谢

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

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

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

  1. 使用一串JavaScript,它必须eval

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

    因为这使用eval ,并且可能变得相当丑陋,所以不建议使用。 但它运作正常。

  2. 带function参考

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

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

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

如果你尝试做类似setTimeout(test(), 9999)事情,那么浏览器将首先执行test() ,然后将返回值提供setTimeout 。 所以在你的尝试中……

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

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

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

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

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

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

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

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

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

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