2011-05-20 18 views
0

我想寫一個JS定時器,將由用戶點擊id =「開始」按鈕觸發。如何觸發用戶單擊的setInterval函數?

我已經有計時器本身正常工作,但是當我嘗試添加代碼來啓動按鈕點擊(id =「開始」)計時器我打破它,我不知道爲什麼。

任何幫助將不勝感激!

這裏是JS代碼:

$(document).ready(function(){ 

    var count = 0; 

     $('#start').click(function(){ 
      setInterval(function(){ 
       count++; 
       $('#timer').html(count + ' tacos seconds'); 
      },1000); 
     }); 

    }); 
+0

Ughhh。剛剛意識到我在開始時忘了'$'。現在編輯。 – 2011-05-20 19:32:08

+0

這將在點擊時啓動一個新的間隔計時器。什麼是想要/錯誤?但是,很可能多個定時器不應該被允許堆疊... – 2011-05-20 19:34:17

+0

問題是您的間隔函數未運行或問題到底是什麼? – Brigham 2011-05-20 19:35:45

回答

1
$(document).ready(function() { 
    $('#start').click((function(container) { 
     var interval; 
     return function() { 
      if(interval) clearInterval(interval); 

      var count = 0; 

      interval = setInterval(function() { 
       count++; 
       $(container).html(count + ' tacos seconds'); 
      }, 1000); 
     }; 
    })("#timer")); 
}); 
+0

)這將如何處理(未指定的)問題?:-)(並非我反對在適當的情況下減少count的範圍。在這種情況下,雙重綁定只會使代碼更加複雜理解)。 – 2011-05-20 19:38:25

+0

已更新,以防止多個計時器並將計數範圍更好。 – 2011-05-20 19:43:34

+0

至於使事情更復雜,如果一個人試圖使用回調函數和匿名函數,而異步操作太混亂,他們需要找到一個新的愛好/工作。 – 2011-05-20 19:46:18

0
$(document).ready(function() { 
    var count = 0; 
    var myInterval = null; 
    $('#start').click(function(){ 
     myInterval = setInterval(function(){ 
     count++; 
     $('#timer').html(count + ' tacos seconds'); 
     },1000); 
    }); 

});

在click處理程序的作用域中設置setInterval時,嘗試將其分配給變量以保持聲明爲某個級別的間隔。這通常總是對我有用。

0

不知道你的目標是什麼exactily,但也許你會想嘗試這樣的事:

var startInterveal; 
var timerStarted = false; 
var count =0; 
$(document).ready(function() { 
    $('#start').click(function() { 
     if (!timerStarted) { 
      timerStarted = true; 
      count =0; 
      $(this).attr('disabled', 'disabled'); 
      startInterveal = setInterval('tick();', 1000); 
     } 
    }); 
}); 

function tick() { 
    count++; 
    $('#timer').html(count + ' tacos seconds'); 
} 
0

這裏是第二個答案,如果你真的想要去堅果和有東西可重用:

$(document).ready(function() { 
    $('#start').click(overboard("#timer")); 
    $('#start2').click(overboard("#timer2")); 
}); 

function overboard(container) { 
    var interval; 
    return function() { 
     if (interval) clearInterval(interval); 

     var count = 0; 

     interval = setInterval(function() { 
      count++; 
      $(container).html(count + ' tacos seconds'); 
     }, 1000); 
    }; 
}