2011-02-13 263 views
8

我想用2個按鈕'STAY'和'Leave'創建一個頁面。按鈕下方有一個iFrame。當頁面首次加載時,iFrame在10秒後自動開始刷新。當用戶點擊STAY按鈕時,它將停止刷新。之後,如果他點擊LEAVE按鈕,iFrame將在10秒後再次開始刷新。 我使用這個代碼:jQuery - 如何使用clearInterval將其關閉後重新啓動setInterval?

$(document).ready(function() { 
    var refreshIntervalId = setInterval("update()", 10000); 

    $('#leave').click(function() { 
     var refreshIntervalId = setInterval("update()", 10000);; 
    }) 

    $('#stay').click(function() { 
     clearInterval(refreshIntervalId); 
    }) 
}); 

function update(){ 
    var url = "load.php"; 
    $('iframe#ifrm').attr('src', url); 
} 

<div id="bar"> 
    <div class= "button" id="stay"> 
    <a>Stay</a> 
    </div> 
    <div class= "button" id="leave"> 
    <a>Leave</a> 
    </div> 
</div> 

,但它不工作,我會以錯誤的方式使用clearInterval?

回答

11

我認爲你需要拉出函數作用域之外的設置間隔ID。

var refreshIntervalId; 
$('#leave').click(function() { 
     refreshIntervalId = setInterval(update, 10000); 
     }) 
$('#stay').click(function() { 
      clearInterval(refreshIntervalId); 
     }) 
}); 

也許一些驗證的refreshIntervalId變量也檢查...

if(refreshIntervalId!=null){ 
    // Do something with the interval id 
} 
+0

什麼clearInterval究竟是做什麼的? – 2011-02-13 20:42:57

+0

它停止間隔計時器。 'setInterval'啓動間隔定時器,每10秒調用一次'update'函數。 'clearInterval'調用會停止該定時器。 – rcravens 2011-02-13 20:44:32

+0

因此,如果我們在4秒內調用clearInterval,下次再次調用setInterval函數時會使用這6秒嗎? – 2011-02-13 20:47:49

1

首先,你不能在#leave點擊功能定義一個變量,在#stay點擊功能使用它。

使用方法如下:

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 
1

這是一個範圍的問題。這意味着無論您將「var」放在哪裏,都定義了哪些函數可以訪問該變量。如果您在Tricker示例中的所有函數之外定義變量,則文檔中的任何函數都可以訪問該值。以前發佈的

Tricker的例子:

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 

有時整個文檔並不需要訪問的變量,所以你想要把它在函數中。