這有什麼錯我的代碼
你的代碼永遠不會到達呼叫setInterval
,因爲你的
return getRef(ref_id);
線結束功能。
如何在輔助點擊中刪除setInterval?
通過記住您是否有一個正在運行。 setInterval
返回一個「定時器句柄」,它是一個非0
的數字,您可以使用它來關閉它。所以,你可以使用一個變量,初始化爲0
,要記住你是否有一個計時器運行(和記手柄,所以你可以把它關掉):
(function() {
// A handle for setInterval, 0 = not set
var timer = 0;
$("#ref").on("click", ".mc", function(event) {
if (timer) {
// Timer is set, cancel it
clearInterval(timer);
timer = 0;
}
else {
// Timer is not set, set it
var ref_id = $(this).attr('ref_id');
// No `return` on the next line, it ends the function
getRef(ref_id);
timer = window.setInterval(function(ref_id){
getRef(ref_id);
}, 5000);
}
// If you need to return something from the click (for instance,
// `false`), do so here
});
})();
在上面,我認爲你不」當您停止定時器時,您想要撥打getRef
。
一個很好的答案,謝謝!我有幾個鏈接來調用該函數,並且我想在單擊新鏈接時取消所有「其他」,因此只有1個間隔是「活動」的。將定時器引用存儲在變量中並在另一個調用中覆蓋它是最容易的,對吧? – 2013-04-20 12:42:30
@RaphaelJeger:是的,所有事件處理程序都有權訪問變量。只要確保在開始另一個計時器之前取消前一個計時器並將其分配給'timer'。 – 2013-04-20 12:53:08
謝謝!這實際上很簡單,將定時器值存儲在全局中,檢查它是否存在,如果是,則在設置新值之前取消。大! – 2013-04-20 13:25:12