語法
setTimeout(code,millisec)
vart=setTimeout("javascript語句", 毫秒)
setTimeout方法會返回某個值。在上面的語句中,值被儲存在名為 t 的變量中。假如你希望取消這個 setTimeout,你可以使用這個變量名來指定它。
setTimeout()的第一個參數是含有 JavaScript 語句的字符串。這個語句可能諸如 "alert('5 seconds!')",或者對函數的調用,諸如 alertMsg()"。
第二個參數指示從當前起多少毫秒後執行第一個參數。
參數
code (必需):要調用的函數後要執行的 JavaScript 代碼串。
millisec(必需):在執行代碼前需等待的毫秒數。
提示
setTimeout()隻執行 code 一次。如果要多次調用,請使用 setInterval() 或者讓 code 自身再次調用 setTimeout()。
實例
實例1:
function timedMsg()
{
var t=setTimeout("alert('5 seconds!')",5000)
}
Click on the button above. An alert box will be displayed after 5 seconds.
實例2:
function clockon(bgclock){
var now=new Date();
var year=now.getYear();
var month=now.getMonth();
var date=now.getDate();
var day=now.getDay();
var hour=now.getHours();
var minu=now.getMinutes();
var sec=now.getSeconds();
var week;
month=month+1;
if(month<10) month="0"+month;
if(date<10) date="0"+date;
if(hour<10) hour="0"+hour;
if(minu<10) minu="0"+minu;
if(sec<10) sec="0"+sec;
switch (day){
case 1:
week="星期一";
break;
case 2:
week="星期二";
break;
case 3:
week="星期三";
break;
case 4:
week="星期四";
break;
case 5:
week="星期五";
break;
case 6:
week="星期六";
break;
default:
week="星期日"
break;
}
var time="";
time=year+"年"+month+"月"+date+"日 "+week+" "+hour+":"+minu+":"+sec;
if(document.all){
bgclock.innerHTML="系統公告:["+time+"]"
}
var timer=setTimeout("clockon("+ bgclock +")",200);
}
帶參數方法使用setTimeout要注意,setTimeout("函數名("+參數+")",毫秒數),這裡的參數隻能是字符串形式的,而不能傳遞一個對象,網上很多朋友也在問此類問題,我在此說明下,以下我舉幾個個簡單的例子:
網上查找下“帶參數 setTimeout”,很多朋友寫了很多方法來實現使用setTimeout帶對象的方法循環,例如:
var __sto = setTimeout;
window.setTimeout = function(callback,timeout,param)
{
var args = Array.prototype.slice.call(arguments,2);
var _cb = function()
{
callback.apply(null,args);
}
__sto(_cb,timeout);
}
//測試代碼
function aaaa(a)
{
alert(a);
}
function aaaaa(a,b,c)
{
alert(a + b + c);
}
var a = new Object();
window.setTimeout(aaaa,1000,a);
window.setTimeout(aaaaa,2000,a,6,7);
此例中,setTimeout用法,setTimeout(回調函數,時間,參數1,...,參數n)。
又例如:
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
if(typeof fRef == 'function'){
var argu = Array.prototype.slice.call(arguments,2);
var f = (function(){ fRef.apply(null, argu); });
return _st(f, mDelay);
}
return _st(fRef,mDelay);
}
function test(x){
alert(x);
}
window.setTimeout(test,1000,'fason');
此例中,重載了一下window.setTimeout,用apply去回調前面的function。
例1:
function test(obj)
{
alert(obj);
setTimeout("test("+ obj +")",1000);
}
當鼠标按下此按鈕時調用test(),将"1"傳遞進去,屏幕上每隔1000毫秒(1秒)彈出一次對話框,顯示1,沒問題。
例2:
function test(obj)
{
alert(obj);
setTimeout("test("+ obj +")",1000);
}
這裡的this可以當做document.getElementById("btnTest")來理解,當鼠标按下此按鈕時向test函數傳遞的是一個對象,屏幕顯示[object],
1000毫秒之後不再顯示第二次。問題來了,浏覽器左下報腳本錯誤,詳細信息裡顯示object未定義。
例3:
function test(obj)
{
alert(obj);
setTimeout("test()",1000);
}
setTimeout裡的test()沒帶參數,第一次顯示[object],1000毫秒之後顯示undefined,變量尚未賦值,也就是說用此方式可以實現帶參數的方
法循環,但是參數被銷毀。
其實這很簡單就可以實現,不必寫那麼長的代碼來實現。
例4:
function test(obj)
{
alert(obj);
setTimeout("test('"+ obj +"')",1000);
}
注意,setTimeout裡的test中的參數obj前後的引号,在雙引号内有一對單引号,這樣:setTimeout("test(單引号雙引号+obj+雙引号單引号)"),行了吧~每隔1000毫秒屏幕顯示一次[object],傳遞對象成功。
疑義:第4條 最終傳走的是“對象”的字符串“object” 而不是初始的對象obj。隻是obj的類型而已。并沒有達到傳遞對象的作用。
可以測試一下代碼: 彈出傳來對象的id
obj=document.getElementById('sssss');
function test(obj)
{
alert(obj.id);
setTimeout("test('"+ obj +"')",1000);
}
test(obj)
第一次彈出了ID 第2次開始未定義。對象傳遞不成功
指定時間跳轉到目标頁面:
setTimeout("location='index.asp'",2000);
setTimeout調用無參數的函數時候不要寫上括号否則頁面一加載完就會直接執行函數,如
setTimeout(test,3000);
function test(){
alert("hello world");
}
setTimeout調用有參數的可以有以下兩種寫法
1.
setTimeout(test,3000,'小莊');
function test(obj){
alert("hello,"+obj);
}
2.
setTimeout(function(){test('小莊')},3000);
function test(obj){
alert("hello,"+obj);
}
實例 三 無窮循環
要創建一個運行于無窮循環中的計時器,我們需要編寫一個函數來調用其自身。在下面的例子中,當按鈕被點擊後,輸入域便從 0 開始計數。
var c = 0var tfunction timedCount()
{ document.getElementById('txt').value = c; c = c + 1; t = setTimeout("timedCount()", 1000); }
語法一
var timeoutID = setTimeout(func, delay, [param1, param2, ...]);
參數說明
func 調用方法的引用
delay延時
[param1, param2, ...] 對調用方法傳入的參數
返回值
timeout的id