2013-04-20 107 views
1

我的代碼有什麼問題,當我想要的是在點擊時調用函數,然後再每5秒重複一次?點擊後重復調用函數

$("#ref").on("click", ".mc", function(event) { 
    var ref_id = $(this).attr('ref_id'); 
     return getRef(ref_id); 
     window.setInterval(function(ref_id){ 
     getRef(ref_id); 
     }, 5000); 
}); 

以及如何在輔助點擊中刪除setInterval?

感謝您的任何提示!

回答

1

這有什麼錯我的代碼

你的代碼永遠不會到達呼叫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

+0

一個很好的答案,謝謝!我有幾個鏈接來調用該函數,並且我想在單擊新鏈接時取消所有「其他」,因此只有1個間隔是「活動」的。將定時器引用存儲在變量中並在另一個調用中覆蓋它是最容易的,對吧? – 2013-04-20 12:42:30

+0

@RaphaelJeger:是的,所有事件處理程序都有權訪問變量。只要確保在開始另一個計時器之前取消前一個計時器並將其分配給'timer'。 – 2013-04-20 12:53:08

+0

謝謝!這實際上很簡單,將定時器值存儲在全局中,檢查它是否存在,如果是,則在設置新值之前取消。大! – 2013-04-20 13:25:12

1

在您的功能return getRef(ref_id);之後的所有內容都將被忽略。

您可能應該刪除return關鍵字。

+0

omg我真是個傻瓜:)我在getRef中有一個返回錯誤,但是應該到這個函數的結尾,現在我使用它了:)謝謝! – 2013-04-20 12:26:12