博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
setTimeout and jquery
阅读量:5277 次
发布时间:2019-06-14

本文共 2547 字,大约阅读时间需要 8 分钟。

setTimeout(以及setInterval)必须被告知延时后要做什么,而且只有三种方式来告知它:

1.用一个必须编译的js的字符串

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

 因为它通过编译会变得相当难看,并不推荐. 不过却很管用.

 

2.带上一个变量参数

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

注意我们不用setTimeout(test(), 9999). 只用这个函数的名称.

 

3.用匿名函数,你自己构建的,就像我之前在第一个代码块中做的那样.

如果你试图执行类似setTimeout(test(), 9999), 那么浏览器会首先执行test(),  再返回值给setTimeout.

所以当你试图...

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

...浏览器执行jquery语句, fading in the #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 executetest(), 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.

 

/*** 解决方案: ***/

You can also use jQuery's .delay().  (可用一下jquery方法来达到延时目的)

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

<!------------or--------------->

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接受用一个函数作为第一个属性 - 你现在通过一个jquery选择器, 它立即编译后 执行 fadeIn 的操作. 代替入匿名函数)

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

<!------------over GOOD--------------->

 

 

其他参考:

转载于:https://www.cnblogs.com/lucoy/archive/2012/04/11/2443129.html

你可能感兴趣的文章
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
0320-学习进度条
查看>>
MetaWeblog API Test
查看>>
移动、尺寸改变
查看>>
c# 文件笔记
查看>>
类和结构
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>