我有以下代码:
jQuery(document).ready(function()
{
setTimeout($('#loading').fadeIn('slow'), 9999);
});
它应该在9999毫秒后慢慢淡入加载元素,但它会立即淡化它...为什么?
任何人都可以提供帮助。感谢
答案 0 :(得分:9)
为了做你想做的事,你必须将jQuery包装在一个匿名函数中:
setTimeout(function () {
$('#loading').fadeIn('slow');
}, 9999);
必须告知setTimeout
函数(以及setInterval
)延迟后要做什么。并且只有三种方法可以告诉它该做什么:
使用JavaScript字符串时,必须eval
:
setTimeout('$("#loading").fadeIn("slow")', 9999);
因为它使用eval
,并且可能变得非常难看,所以不建议使用。但它运作正常。
使用功能参考:
var test = function () {
$('#loading').fadeIn('slow');
};
setTimeout(test, 9999);
请注意,我没有setTimeout(test(), 9999)
。我只是给了它功能的名称。
使用您动态构建的匿名函数,这就是我在上面的第一个代码块中所做的。
如果您尝试执行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( '慢');