如何在jQuery中使用 setInterval,setTimeout

當遇到setInterval,setTimeout與jquery混用的問題 時,直接按JavaScript中的語法寫並不起做用,有如下兩種解決方法。

方法1. 直接在ready中調用其餘方法,會提示缺乏對象的錯誤,應用jQuery的擴展能夠解決這個問題。

$(document).ready(function(){

$.extend({
  show:function(){
   alert("ready");
  }
});
setInterval("$.show()",3000);
});

 

方法2. 指定定時執行的函數時不要使用引號和括號。

function show(){
   alert("ready");
}
setInterval(show,3000);// 注意函數名沒有引號和括弧!

setTimeout(表達式,延遲時間); 單位:ms(毫秒);1s=1000ms;setInterval(表達式,交 互時間);單位:ms(毫秒);1s=1000ms;window.setTimeout()在執行時,它從載入後延遲指定的時間去執行一個表達式或者是函數;僅執行一次;和window.clearTimeout一塊兒使用.window.setInterval()在執行時,它從載入頁面後每隔指定的時間執行一個表達式或者是函數;(功能相似於遞歸函數);和window.clearInterval一塊兒使用.

基本用法:

執行一段代碼:
   var i=0;

   setTimeout("i+=1;alert(i)",1000);
 
執行一個函數:
   var i=0;

     setTimeout(function(){i+=1;alert(i);},1000);
注意比較上面的兩種方法的不一樣。

下面再來一個執行函數的:
var i=0;
function test(){
i+=1;
alert(i);
}
setTimeout("test()",1000);
也能夠這樣:
setTimeout(test,1000);


 總結:

1、setTimeout的原型是這樣的:

      iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])

 
2、setTimeout 有兩種形式:

  setTimeout(code,interval)

   setTimeout(func,interval,args)

  其中code是一個字符串,func是一個函數.這裏要注意:"函數"的意義,是一個表達式,而不是一個語句.好比你想週期性執行一個函數function a(){//...}可寫爲
 setInterval("a()",1000)

setInterval(a,1000)  //這裏注意第二種形式中是a,不要寫成a(),切記!
展開來講,無論你這裏寫的是什麼,若是是一個變量,必定是一個指向某函數的變量; 若是是個函數,那它的返回值就 要是個函數
 

3、用setTimeout實現setInterval的功能
 
思路很簡 單,就是在一個函數中調用不停執行本身,有點像遞歸
var i=0;
function xilou(){
i+=1;
if(i>10){alert(i);return;}
setTimeout("xilou()",1000);
//用這個也能夠
//setTimeout(xilou,1000);
}
 

4、在類中使用setTimeout

終於到正題了,其實在類中使用你們遇到的問題都是關於this的,只要解決了這個this的問題就萬事無憂了。呵呵。讓咱們來分析一 下:
function xilou(){
//by 盛世遊俠http://http://www.cnblogs.com/macliu/
this.name="youxia";
this.sex="男";
this.num=0;
}
xilou.prototype.count=function(){
this.num+=1;
alert(this.num);
if(this.num>10){return;}
//下面用四種方法測試,一 個一個輪流測試。
setTimeout("this.count()",1000);//A:當下面的x.count()調用時會發生錯 誤:對象不支持此屬性或方法。
setTimeout("count()",1000);//B:錯誤顯示:缺乏對象
setTimeout(count,1000);//C:錯誤顯示:'count'未定義
//下面是第四種 by 盛世遊俠http://http://www.cnblogs.com/macliu/
var self=this; setTimeout(function() {self.count();},1000);//D:正確 } var x=new xilou(); x.count();
 
錯誤分析:

  A:中的this其實指是window 對象,並非指當前實例對象

  B:和C:中的count()和count其實指的是單獨的一個名爲count()的函數,但也能夠是 window.count(),由於window.count()能夠省略爲count()

  D:將變量self指向當前實例對象,這樣 js解析引擎就不會混餚this指的是誰了。

  話說回來,雖然咱們知道setTimeout("this.count()",1000) 中的this指的是window對象,但仍是不明白爲何會是window對象^_^(有點頭暈...),那咱們能夠 想象一下這個setTimeout是這樣被定義的:setTimeout是window的一個方法,全稱是這樣 的:window.setTimeout(),那應該是這樣被定義的:

window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){
//.....代碼
return timer//返回一個標記符
}
  因此當向 setTimeout()傳入this的時候,固然指的是它所屬的當前對象window了。
相關文章
相關標籤/搜索