关于setInterval、setTimeout在jQuery中的使用注意事项


Posted in Javascript onSeptember 28, 2011

以前写定时器的时候,总是习惯直接

setInterval("fn()",2000);
最近碰到个问题,在使用jquery写定时器时,总是会出现fn不存在的错误提示,如下

$(function(){setInterval("fn()",2000);})
解决方法是去掉引号和括号,采用最原始的方法

$(function(){setInterval(fn,2000);})
另外一种就是在书写jq的扩展,如下

$(function(){ 
$.extend({ 
fn:function(){ 
alert("im fn!"); 
} 
}); 
setInterval("$.fn()",2000); 
});

以上写法都是没什么问题的。但是如果需要传递参数该如何?

像上面第一种写法,

$(function(){setInterval(fn,2000);})
如果写成

$(function(){setInterval(fn(para),2000);})
就报错了。这个比较经典,比较白痴。

这时你可以内置一个function,写成

$(function(){setInterval(function(){fn(para)},2000);})
这样也是可以的。

至于第二种方法如何传递,这就更简单了,我就不多说了。

发到博客仅当记忆使用,都是基础啊!也是初学者容易犯错的地方!

//========================

还是补充下第二种传参的方法。

先看段代码

$(function(){ 
$start = 1; 
$.extend({ 
a:function(t){ 
$index = t; 
alert($index); 
$start++; 
} 
}); 
setInterval("$.a("+$start+")",2000); 
});

有一些人会尝试这么去写,结果是什么?结果就是alert出来的,一直是1,不会增加。这里需要注意的是setInterval里面的第一个参数,这是一个语句,用双引号括了起来,里面的东西会被解释成变量。如果按照上面的写法,相当于

setInterval("$.a(1)",2000);
那么结果也就无可厚非了。正确的写法,当然是这样

$(function(){ 
$start = 1; 
$.extend({ 
a:function(t){ 
$index = t; 
alert($index); 
$start++; 
} 
}); 
setInterval("$.a($start)",2000); 
});

这时$start才会被解释成变量。语句相当于function(){a(变量)},而不是function(){a(值)}。
Javascript 相关文章推荐
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
Dec 23 Javascript
jquerymobile局部渲染的各种刷新方法小结
Mar 05 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
js如何实现点击标签文字,文字在文本框出现
Aug 05 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
Javascript实现时间倒计时功能
Nov 17 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 #Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 #Javascript
一个挺有意思的Javascript小问题说明
Sep 26 #Javascript
Jquery之Ajax运用 学习运用篇
Sep 26 #Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 #Javascript
在Windows上安装Node.js模块的方法
Sep 25 #Javascript
javascript权威指南 学习笔记之null和undefined
Sep 25 #Javascript
You might like
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
php中动态调用函数的方法
2015/03/16 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Python class的继承方法代码实例
2020/02/14 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
新学期红领巾广播稿
2014/01/14 职场文书
函授自我鉴定范文
2014/02/06 职场文书
任命书怎么写
2015/03/02 职场文书
办公经费申请报告
2015/05/15 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
深入理解go slice结构
2021/09/15 Golang