2012-04-24 43 views
1
var timer = 0 
var startInterval = function(value) { 
    timer = setInterval("checkNewPost();", value); 
} 
var stopInterval = function() { 
    clearInterval(timer); 
} 

jQuery("#centerColumn a").click(function() { 
    var a_id = jQuery(this).attr("id"); 
    var splitValue = a_id.split("-"); 
    var newValue = splitValue[1]; 

    if(newValue == "30") { 
     stopInterval; 
     startInterval(10000); 
    } 
    else if(newValue == "1") { 
     stopInterval; 
     startInterval(20000); 
    } 
    else if(newValue == "5") { 
     stopInterval; 
     startInterval(30000); 
    } 
    else if(newValue == "pause") 
     stopInterval; 
}); 

正如你可以在我的代碼中看到的,邏輯是非常簡單的,當NEWVALUE等於30將停止當前間隔,並與10000秒後重新啓動它在setInterval上。當newValue等於暫停時,它將停止所有setInterval。的Javascript clearInterval和setInterval()的演技並不如預期

這裏的問題是它不正確,我不知道爲什麼?有人可以指導我做到這一點。您的幫助將不勝感激!

謝謝! :)

回答

3

你需要調用stopInterval功能

stopInterval(); 

我認爲它不會沒有括號

+2

這是正確的。 'stopInterval'是對函數的引用,'stopInterval()'是*調用函數。前者被用作自己的陳述,沒有真正意義,就像「myVariable;」並不意味着什麼。但是,在執行諸如'var callback = stopInterval();時,引用一個函數而不調用它是很有用的。 ... callback();或者'stopInterval =(新函數聲明)'。 – 2012-04-24 07:10:28

+0

不錯的解釋:) – 2012-04-24 07:14:49

2

您對stopInterval通話後他們缺少括號所以你現在不工作實際上調用該方法。

嘗試使用​​

3

更換

stopInterval; // fonction simply put on stack 

stopInterval(); // fonction call 
1

其他所有人是正確的,你應該使用stopInterval()。這裏還有一個更緊湊和更具可讀性的IMO代碼版本:

$('#centerColumn a').click(function() { 
    var id = this.id.split('-')[1]; 
    var value = { 
     30: 10000, 
     1: 20000, 
     5: 30000 
    }; 
    id ==== 'pause' && stopInterval(); 
    if (value[id]) { 
     stopInterval(); 
     startInterval(value[id]); 
    } 
}); 
+0

可讀?糖! ...'id ===='pause'&& stopInterval();'每當你停下來這條線時,你必須考慮它 - 它不是代碼,而是更清潔! (而與枚舉的想法很好...) – 2012-04-24 07:29:00

+0

我想這取決於...'id ===='暫停'&& stopInterval()'是可讀的我的眼睛... – elclanrs 2012-04-24 07:32:06

相關問題