2012-02-23 75 views
0

我正在嘗試創建間隔併發送請求。它將從點擊開始並單擊停止。開始和停止工作很好。但是當你再次按下按鈕來啓動間隔時,停止間隔後,間隔開始兩次。停止並再次啓動後,啓動3個時間間隔。清除後兩次啓動間隔

這裏是我的代碼:

var running=0 
var pathArray = window.location.pathname.split('.html'); 
var pathArray = pathArray.reverse(); 
var pathArray = pathArray .join(''); 
var pathArray= pathArray .split('/'); 
var bidnum=pathArray[3]; 
    $(document).ready(function(){ 

     $('body').append("<div id=\"cdjs\" style=\"position: absolute; top: 30px; background-color: gray; box-shadow: 0px 0px 0px 3px; left: 30px;\">Click to start</div>"); 
     $('#cdjs').click(letswin); 

    }); 

    function checkandbid(){ 
      if(running==1){ 
       $.get("http://www.bigibid.com/LiveResponder/LR.bid?_as="+bidnum, function(data){ 
        Marray = data.split("'te':'") 
        time = Marray[1].split("'") 
        time = time[0] 
        $('#cdjs').html(time); 
        if(time < 2 && able==1){ 
          able=0; 
          $('#ctl00_ContentPlaceHolder1_ibBid').click(); 
        }else{ 
         able=1; 
        } 
       }); 
      } 
    } 

     function letswin(){ 
      if(running==1){ 
        running=0 
        clearInterval(IntRun); 
        delete IntRun; 
        $('#cdjs').html('Click to start'); 
      }else if(running==0){ 
       running++ 
       delete IntRun; 
       clearInterval(IntRun); 
       var IntRun = setInterval(checkandbid, 300); 
       } 

     } 

    function bidders(){ 
    } 

這裏是jsFiddle

回答

3

IntRun變量只有letswin函數內範圍的,並會被重置爲不確定的值每次調用該函數時。

您需要將其聲明移到該函數的之外,以便在調用之間記住它的值。

+0

謝謝你的幫助。它工作很好。我會在幾分鐘內接受你的回答。 – 2012-02-23 11:47:37

+0

@ T.J.Crowder你知道嗎,我知道,但我擁有的文本可能更容易理解;-) – Alnitak 2012-02-23 11:52:15

2

您的letswin函數聲明瞭一個本地變量被稱爲IntRun。它不會在調用該函數之間持續存在。您需要將其移出到包含範圍,以便在呼叫之間進行維護。

另請注意,您不使用delete上您聲明的變量var。只在對象屬性上。 (JavaScript中delete運算符的用途是從對象中刪除屬性。)

+0

謝謝你的幫助。它工作很好。 – 2012-02-23 11:47:13

1

這個怎麼樣?

var running = false; 
var checkandbidInterval; 

function letswin(){ 
    if (checkandbidInterval) { 
     clearInterval(checkandbidInterval); 
    } 

    if (running){ 
     running = false; 

     $('#cdjs').html('Click to start'); 

    } 
    else { 
     running = true; 

     checkandbidInterval = setInterval(checkandbid, 300); 
    } 

} 

請注意變量的變化,因爲您將intRun作爲本地作用域變量而不是全局作用域。另外,如果您正在檢查0或1的變量,則只需使用布爾值(true或false)。