2011-07-06 53 views
4

我正在向已開發的應用程序添加新功能。我正在嘗試添加一個自動渲染功能,該功能會在一定的時間間隔後自動渲染屏幕的某個部分。我爲此使用setInterval,一切工作正常。有效使用setInterval/clearInterval

我的問題是,我應該如何爲其他所有事件調用clearInterval(intervalId)函數,除了一個。請考慮一個例子: 假設我有一些與當前屏幕相關的事件,並且我想僅在「.myBtn」單擊時啓動我的setInterval,並停止所有其他事件。

var intervalId = 0; 

    $(".myBtn").click(function(){ 
     intervalId = setInterval(function(){ 
      alert("execute something"); 
     }, 2000); 
    }); 

    $(".otherElm").click(function(){ 
     // some other stuff. 
    }); 


    $(".otherElm1").click(function(){ 
     // some other stuff. 
    }); 


    $(".otherElm2").click(function(){ 
     // some other stuff. 
    }); 

對於上述情況,我知道只有一個辦法阻止的間隔,即把「clearInterval(intervalId)」中的所有其他事件

但是,有沒有其他方法可以做到這一點?

希望我已經把所有東西都弄清楚了,以便我能理解我的問題。

在此先感謝

回答

1

你是對您的評論 - 你必須把clearInterval(IntervalId)到所有你需要停止該事件的事件。這樣做有問題嗎?

編輯:

確定他們都與一個類 - 說榆樹。完成後,使用$(「。elm」)。單擊(clearinterval)。

+0

實際上,屏幕上有很多與它們相關的事件的元素,在這種情況下,我將不得不在每個元素中放置clearInterval :( – Bhupi

+2

然後用類標識它們,並使用$(「 .elm「)。click(clearinterval) –

+1

這不是一個答案。 – katspaugh

-2
​​

1000 - 1秒。

每隔一秒,它會提醒「negaweblog.wordpress.com」

+2

-1傳遞一個字符串 – ThiefMaster

1

另一種方式來做到這一點會做這樣的事情:

$(".myBtn").click(function(){ 
    setTimeout(someFunction,2000); 
}); 

var someFunction = function() 
{ 
    // CODE HERE 
    if(conditions for stopping function are not met){ 
     //Run function again 
     setTimeout(someFunction, 2000); 
    } 
} 

雖然越來越多的代碼,我覺得它更容易管理,特別是如果你最終需要處理很多的intervalID。

+1

這個問題是th同樣 - 在所有其他調用中需要設置「停止功能條件」 –

+0

可以添加一個全局布爾值(全局的應用程序,即),這是在someFunction中測試的。如果爲true(默認),則運行該函數。如果錯誤。它停下來。頁面上的所有「停止元素」都應該綁定到一個更改此布爾值的函數。 – thesonglessbird

+0

所以你仍然需要在每個想要阻止它的事件中加入一些東西。我同意這是一個比使用間隔和阻止它們更好的解決方案,但不必編碼到其他每個按鈕的問題仍然存在。 –