最近,因項目須要,須要實現setTimeOut傳參數的功能,搜索了不少的資源。終於找到一個比較好的方法了,記錄下來,與你們分享。javascript
不管是window.setTimeOut仍是window.setInterval,在使用函數名做爲調用句柄是都不能帶參數。java
先看一段簡單的javascript代碼:函數
1 function show() 2 { 3 alert("Hello World"); 4 } 5 setTimeout(show,1000);
代碼結果是:1秒中以後輸出Hello World,但若是改爲:this
1 setTimeout(show(),1000);
會當即輸出結果,達不到延時的目的。但若是加上引號(雙引號或單引號)就能夠了,如:spa
1 setTimeout("show()",1000);
但若是加上參數又不能夠了,如:debug
1 setTimeout("show(name)",1000);
可經過如下方法來解決以上問題:寫一個函數,並返回一個不帶參數的函數。代碼以下:code
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事件blog
解決方法:事件
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 }