2014-01-21 41 views
0

我有兩個開始和停止按鈕我用作定時器的div。我創建了一個json對象來存儲一些時間變量和其他一些東西。當我點擊開始,計時器工作。我將其中一個對象的屬性設置爲等於超時功能current_job = jobs[current_job_id];,然後是current_job.t = setInterval(function(){...setTimeout加倍

雖然我點擊其他按鈕之一,但兩個setIntervals似乎加倍。我究竟做錯了什麼?演示在這裏: http://codepen.io/EightArmsHQ/pen/2d60722bb802bd1c3da5fe42cbc15442

而最下方的代碼:

var jobs = []; 

$(".job").each(function(i){ 
    jobs[i] = { 
     "start_time" : false, 
     "stop_time"  : false, 
     "job_number" : $(this).find("h1").text(), 
     "time"   : 0, 
     "chunk_id"  : false, 
     "t"    : false, 
    } 
    $(this).attr('id', i); 
}) 

$(".start_timer").click(function(){ 

    current_job_div = $(this).closest(".job"); 
    current_job_id = parseInt(current_job_div.attr("id")); 
    current_job = jobs[current_job_id]; 


    current_job.t = setInterval(function(){ 
     current_job.time += 1; 
     current_job_div.find(".time_spent").text(make_time(current_job.time)); 
    },1000); 
}); 

$(".stop_timer").click(function(){ 

    current_job_div = $(this).closest(".job"); 
    current_job_id = parseInt(current_job_div.attr("id")); 
    current_job = jobs[current_job_id]; 

    clearInterval(current_job.t); 
}); 

回答

1

瓶蓋受封關閉,在這裏看到:http://ejohn.org/apps/learn/#48

工作示例代碼的:http://codepen.io/anon/pen/hkEga

(編輯:^雖然你確實有一個錯誤 - 嘗試按下開始不止一次:))

關鍵代碼更改:

current_job.t = (function (current_job, current_job_div) { 
    return setInterval(function(){ 
     current_job.time += 1; 
     current_job_div.find(".time_spent").text(make_time(current_job.time)); 
     },1000); 
    }(current_job, current_job_div)); 
1

問題是與使用全局變量的。

因此,每次單擊Start按鈕時相同全局變量被更改。

因此,代碼應更改爲:

var current_job_div = $(this).closest(".job"); 
var current_job_id = parseInt(current_job_div.attr("id")); 
var current_job = jobs[current_job_id]; 

即創建局部變量而不是使用全局變量。