最近,因项目需要,需要实现setTimeOut传参数的功能,搜索了很多的资源。终于找到一个比较好的方法了,记录下来,与大家分享。
无论是window.setTimeOut还是window.setInterval,在使用函数名作为调用句柄是都不能带参数。
先看一段简单的javascript代码:
1 function show() 2 { 3 alert("Hello World"); 4 } 5 setTimeout(show,1000);
代码结果是:1秒中之后输出Hello World,但如果改成:
1 setTimeout(show(),1000);
会立即输出结果,达不到延时的目的。但如果加上引号(双引号或单引号)就可以了,如:
1 setTimeout("show()",1000);
但如果加上参数又不可以了,如:
1 setTimeout("show(name)",1000);
可通过以下方法来解决以上问题:写一个函数,并返回一个不带参数的函数。代码如下:
1 <script language="javascript"> 2 function show(name) 3 { 4 alert("Hello World:" + name); 5 } 6 function _show(name) 7 { 8 return function() 9 { 10 show(name); 11 } 12 } 13 setTimeout(_show(name),1000); 14 </script>
需求:1.setTimeOut传参数 2.动态设置onclick事件
解决方法:
1 function timeClick(obj) 2 { 3 // var obj=document.getElementById(''); 4 obj.style.backgroundColor="gray"; 5 obj.onclick=function(){ return false;}; 6 setTimeout(function(){resetbgColor(obj);},3000); 7 } 8 9 function resetbgColor(obj) 10 { 11 // var obj=document.getElementById(''); 12 obj.style.backgroundColor="blue"; 13 // $('#'+'').click(timeClick); 14 // debugger; 15 obj.onclick=function(){ 16 timeClick(this); 17 }; 18 }