2009-12-22 128 views
3

我有一個頁面需要每60秒刷新一次。在此頁面上,我使用iBox彈出各種項目。我的問題是元刷新殺死不需要的彈出窗口。請記住我對JavaScript的使用經驗不多,所以我的解決方案可能根本不對。啓動並停止javascript刷新

我想出的解決方案是使用JavaScript來進行刷新。當頁面加載時,我將啓動計時器,當ibox彈出時,我將清除計時器,當ibox關閉時,我將再次啓動計時器。

我通過使用一個簡單的函數來設置它。

 
function timedRefresh(timeoutPeriod){ 
    var resetId = 0; 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

然後我打電話給功能<body onload="timedRefresh(60000)">

我的問題源自於當我嘗試撥打clearTimeout(resetID)時。我試圖從ibox腳本的隱藏函數調用該方法,但它實際上並沒有清除該計時器。我認爲這可能是一個範圍問題,我可能需要做一些Object.clearTimeout(Object.resetID)但這只是一個猜測。

+0

這些解決方案大多數都是正確的。問題顯然是一個範圍問題,解決方案就是您想要使用的範圍。如果使用window.resetId有任何問題,我會改變我的答案,但那就是我使用的,所以這就是答案。 – UmYeah 2009-12-22 16:15:46

+0

添加有用的東西給我的答案 – 2009-12-23 08:01:36

回答

1

的鏈接做到這一點:從相關ibox的功能使用window.resetId

function timedRefresh(timeoutPeriod){ 
    window.resetId = 0; // make it clear it's global by prefixing "window." 
    window.resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

然後。


查看您的評論我會添加一些內容。

「窗口」。將在瀏覽器中編寫腳本時起作用,如果你在其他地方使用JS,它可能無法工作。

只要你在一個網頁上,然而,窗口是全局對象和「窗口」。前綴是IMO的一個很好的方式,可以清楚地表明某些變量是全局的;如果你一貫地使用它,所有沒有「窗口」的變量。在他們面前永遠是本地的。

你應該知道但是,它也將工作,如果你只是用的resetID沒有任何前綴和不VAR因爲不與VAR聲明的變量自動作用域窗口

This short-ish guide將教你大部分關於Javascript,執行上下文和閉包中變量可見性的知識。它會讓你成爲一個致命的Javascript忍者。

+0

偉大的東西。感謝您的額外信息。 – UmYeah 2009-12-23 14:02:20

0

最簡單的方法是將resetId變量添加到全局範圍:

var resetId = 0; 
function timedRefresh(timeoutPeriod){ 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

或者,你也許可以在同一範圍內定義的iBox的隱藏功能,但我不太知道如何iBox的作品。

範圍的詳細閱讀:http://javascript.about.com/library/bltut07.htm

0

你是對的,問題是變量resetId的範圍。正如您在關鍵字var的函數中聲明的那樣,它在本函數中是本地的,因此它不在其外部。

簡單地聲明resetId之外的功能,使其全球性的,你會被罰款:

var resetId = 0; 
function timedRefresh(timeoutPeriod){ 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
}