2009-09-24 32 views
102

Tôi đã điều sau đây:Thiết lập lại một setTimeout

window.setTimeout(function() { 
    window.location.href = 'file.php'; 
}, 115000); 

Làm thế nào tôi có thể, thông qua một hàm .click, thiết lập lại bộ đếm giữa chừng qua đếm ngược?

+0

Bạn có thể sử dụng một thực hiện debounce hiện có. – zehelvion

Trả lời

182

Bạn có thể lưu trữ tham chiếu đến thời gian chờ đó, sau đó gọi clearTimeout trên tham chiếu đó.

// in the example above, assign the result 
var timeoutHandle = window.setTimeout(...); 

// in your click function, call clearTimeout 
window.clearTimeout(timeoutHandle); 

// then call setTimeout again to reset the timer 
timeoutHandle = window.setTimeout(...); 
+1

Rất lạ là không có '.clear()' trên chính đối tượng thời gian chờ. – Automatico

+9

@ Cort3z đó là vì 'window.setTimeout' trả về một số (ID của bộ tính giờ) và không phải là" đối tượng hết giờ ". –

+0

Bạn là người tiết kiệm cuộc sống! Cảm ơn bạn rất nhiều!!! – wdanda

17

clearTimeout() và nạp tham chiếu của setTimeout, đây sẽ là một số. Sau đó, gọi lại:

var initial; 

function invocation() { 
    alert('invoked') 
    initial = window.setTimeout( 
    function() { 
     document.body.style.backgroundColor = 'black' 
    }, 5000); 
} 

invocation(); 

document.body.onclick = function() { 
    alert('stopped') 
    clearTimeout(initial) 
    // re-invoke invocation() 
} 

Trong ví dụ này, nếu bạn không nhấp vào phần tử cơ thể trong 5 giây thì màu nền sẽ có màu đen.

tham khảo:

Lưu ý: setTimeout và clearTimeout không phương pháp có nguồn gốc ECMAScript, nhưng phương pháp Javascript của namespace cửa sổ toàn cầu.

4
var myTimer = setTimeout(..., 115000); 
something.click(function() { 
    clearTimeout(myTimer); 
    myTimer = setTimeout(..., 115000); 
}); 

Điều gì đó dọc theo các dòng đó!

4

Bạn sẽ phải nhớ thời gian chờ "hẹn giờ", hủy bỏ nó, sau đó khởi động lại nó:

g_timer = null; 

$(document).ready(function() { 
    startTimer(); 
}); 

function startTimer() { 
    g_timer = window.setTimeout(function() { 
     window.location.href = 'file.php'; 
    }, 115000); 
} 

function onClick() { 
    clearTimeout(g_timer); 
    startTimer(); 
} 
+0

Thú vị là tùy chọn này đã bị bỏ qua. Những người khác tất cả dường như yêu cầu chức năng nội bộ hẹn giờ được nhân đôi, đó là ít hơn khô và đau đớn nếu có nhiều hơn một vài dòng mã để duy trì hai lần ... – brianlmerritt

1
$(function() { 

    (function(){ 

     var pthis = this; 
     this.mseg = 115000; 
     this.href = 'file.php' 

     this.setTimer = function() { 
      return (window.setTimeout(function() {window.location.href = this.href;}, this.mseg)); 
     }; 
     this.timer = pthis.setTimer(); 

     this.clear = function(ref) { clearTimeout(ref.timer); ref.setTimer(); }; 
     $(window.document).click(function(){pthis.clear.apply(pthis, [pthis])}); 

    })(); 

}); 
2

hẹn giờ này sẽ cháy một "Hello" alertbox sau 30 giây. Tuy nhiên, mỗi khi bạn nhấp vào nút đặt lại hẹn giờ, nó sẽ xóa timerHandle rồi đặt lại lần nữa. Khi nó bị sa thải, trò chơi kết thúc.

<script type="text/javascript"> 
    var timerHandle = setTimeout("alert('Hello')",3000); 
    function resetTimer() { 
     window.clearTimeout(timerHandle); 
     timerHandle = setTimeout("alert('Hello')",3000); 
    } 
</script> 

<body> 
    <button onclick="resetTimer()">Reset Timer</button> 
</body> 
2

Để thiết lập lại bộ đếm thời gian, bạn sẽ cần phải thiết lập và dọn dẹp các bộ đếm thời gian biến

$time_out_handle = 0; 
window.clearTimeout($time_out_handle); 
$time_out_handle = window.setTimeout(function(){---}, 60000); 
+15

Argh, tôi khuyên không nên sử dụng tên biến kiểu php trong javascript . vâng, nó sẽ hoạt động, nhưng Chúa ơi, nó khó hiểu. – psynnott

Các vấn đề liên quan