jQuery和setTimeout
我有以下代码:
jQuery(document).ready(function() { setTimeout($('#loading').fadeIn('slow'), 9999); });
它应该在9999毫秒后慢慢淡入加载元件,但它会直接淡化它…为什么?
谁能帮忙。 谢谢
为了做你想做的事,你必须将jQuery的东西包装在一个匿名函数中:
setTimeout(function () { $('#loading').fadeIn('slow'); }, 9999);
必须告诉setTimeout
函数(以及setInterval
)在延迟后要做什么。 并且只有三种方法可以告诉它该做什么:
-
使用一串JavaScript,它必须
eval
:setTimeout('$("#loading").fadeIn("slow")', 9999);
因为这使用
eval
,并且可能变得相当丑陋,所以不建议使用。 但它运作正常。 -
带function参考 :
var test = function () { $('#loading').fadeIn('slow'); }; setTimeout(test, 9999);
请注意,我没有执行
setTimeout(test(), 9999)
。 我只是给了它function的名称。 -
使用您动态构建的匿名函数,这就是我在上面的第一个代码块中所做的。
如果你尝试做类似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( ‘慢’);