最近,因項目需要,需要實現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 }