2015-09-27 274 views
-2

我已經做了一個計時器,它開始運行,然後點擊觸發計時器的按鈕。 Fiddle。 HTML:爲什麼計時器自動啓動?

<div id="worked">25:00</div> 
<button type="button" onclick="update();">Start</button> 

的JavaScript:

var $worked = $("#worked"); 

function update() { 
    var myTime = $worked.html(); 
    var ss = myTime.split(":"); 
    var dt = new Date(); 
    dt.setHours(0); 
    dt.setMinutes(ss[0]); 
    dt.setSeconds(ss[1]); 

    var dt2 = new Date(dt.valueOf() - 1000); 
    var temp = dt2.toTimeString().split(" "); 
    var ts = temp[0].split(":"); 

    $worked.html(ts[1]+":"+ts[2]); 
    if (ts[1]==0 && ts[2]==0){ 
     return 0; 
    } 
    else{ 
     setTimeout(update, 1000); 
    } 
} 
setTimeout(update, 1000); 
+0

原因是粘貼很多代碼而沒有解釋並詢問爲什麼它不起作用,可能。 –

回答

5

這是因爲你已經給了最後聲明:

setTimeout(update, 1000); 

啓動了計時器在第二。

2

從您的代碼,調用該函數的最後setTimeout(update, 1000); 1秒後

var $worked = $("#worked"); 
 

 
function update() { 
 
    var myTime = $worked.html(); 
 
    var ss = myTime.split(":"); 
 
    var dt = new Date(); 
 
    dt.setHours(0); 
 
    dt.setMinutes(ss[0]); 
 
    dt.setSeconds(ss[1]); 
 

 
    var dt2 = new Date(dt.valueOf() - 1000); 
 
    var temp = dt2.toTimeString().split(" "); 
 
    var ts = temp[0].split(":"); 
 

 
    $worked.html(ts[1] + ":" + ts[2]); 
 
    if (ts[1] == 0 && ts[2] == 0) { 
 
    return 0; 
 
    } else { 
 
    setTimeout(update, 1000); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="worked">25:00</div> 
 
<button type="button" onclick="update();">Start</button>

1

它開始,因爲要調用的更新功能,不管你按一下按鈕

1

這是因爲你的函數定義後setTimeout(update, 1000);額外的呼叫。這被當它是由瀏覽器遇到的,因爲它不屬於一個功能,刪除它,它不會自動開始執行。還一個建議是將其添加爲好:

$(document).ready(function() { $("button").click(update); }); 

而且從刪除onclick="javascript:update();"您HTML。

這是修正的最終代碼將如何看起來像:

var $worked = $("#worked"); 
 

 
    function update() { 
 
     var myTime = $worked.html(); 
 
     var ss = myTime.split(":"); 
 
     var dt = new Date(); 
 
     dt.setHours(0); 
 
     dt.setMinutes(ss[0]); 
 
     dt.setSeconds(ss[1]); 
 
     
 
     var dt2 = new Date(dt.valueOf() - 1000); 
 
     var temp = dt2.toTimeString().split(" "); 
 
     var ts = temp[0].split(":"); 
 
     
 
     $worked.html(ts[1]+":"+ts[2]); 
 
     if (ts[1]==0 && ts[2]==0){ 
 
      return 0; 
 
     } 
 
     else{ 
 
      setTimeout(update, 1000); 
 
     } 
 
    } 
 

 

 
$(document).ready(function() { $("button").click(update); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="worked">25:00</div> 
 
<button type="button">Start</button>

更新:只是爲了解釋爲什麼通過JavaScript綁定click事件比在HTML中使用onclick更好,請參閱:jQuery.click() vs onClick

+0

我不明白爲什麼我們將代碼放在$ document.ready()函數中。 –

+0

with'$ document.ready(function(){})'在頁面加載後,函數回調被執行*。這與將代碼直接放入中不同,在加載頁面時遇到腳本標記時會執行該代碼。我實際上更新了我的答案,並將綁定調用添加到document.ready,這是更安全的方法 – aiman86

+1

來解釋,它更安全,因爲在調用document.ready事件處理程序時DOM已加載,所以您的javascript可以找到按鈕。如果您將