2012-10-11 38 views
1

我想要一個下拉菜單,讓用戶選擇多久刷新頁面。我在$下面的代碼(文件)。就緒():使用從下拉列表中的值設置setInterval與jQuery的變化

$(".refreshInterval").change(setInterval(showDashboard(),parseFloat($(".refreshInterval").val())*60*1000)); 

...其中refreshInterval是...

<select class="refreshInterval" value="1"> 
    <option value="0">Off</option> 
    <option value="0.5" selected>30 sec</option> 
    <option value="1">1 min</option> 
    <option value="2">2 min</option> 
    <option value="5">5 min</option> 
</select> 

而且showDashboard()是可訪問的功能。在初始加載頁面時,調用showDashboard()。然而,當我改變了下拉菜單,我從jQuery的得到這個錯誤:

Uncaught TypeError: Object 166 has no method 'apply' 

任何想法?

回答

3

我建議你以更清晰的方式編寫代碼(而不是做單行程)。這樣更容易發現語法錯誤。

解決方案:(不好,請編輯!)

$(".refreshInterval").change(function() {  
    var interval = parseFloat($(this).val()) * 60 * 1000; 
    setInterval(showDashboard(), interval) 
}); 
​ 

你失蹤

function() { } 

編輯--------

對不起!我把

setInterval(showDashboard(), interval) 

應該已經

setInterval(showDashboard, interval); 

這裏是正確的完整代碼:

ref = setInterval(showDashboard, 1000) 

$(".refreshInterval").change(function() {  
    var interval = parseFloat($(this).val()) * 60 * 1000; 
    clearInterval(ref); 
    console.log("New Interval: " + interval); 
    if (interval > 0) { 
     ref = setInterval(showDashboard, interval)  
    } 
}); 


function showDashboard() { 
    console.log(Math.random()); 
} 

​ 

而且的jsfiddle:http://jsfiddle.net/xkj43/3/

+0

那種作品。我如何做到這一點,所以它會加載一次,然後聽取更改? – PLui

+0

@PLui只需在您的文檔就緒功能中將'showDashboard()'調高一點。 – jball

+0

當且僅當下拉框更改時纔會刷新。它似乎並沒有經常刷新。我在showDashboard中添加了一個console.log來確認它。 – PLui

1

試試這個:

$(".refreshInterval").change(function(){ 

setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000) 

}); 
1

你需要一個函數傳遞給事件..你是路過此處的方法。

也會改變該showDashboard()showDashboard 嘗試那點破你需要一個函數傳遞給setInterval是正確的這一

$(".refreshInterval").change(function(){  
     setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000)) 
    }); 
+0

當我有'showDashboard()'而不是'showDashboard','setInterval'調用它。但是沒有'()',它根本不會調用它。這是爲什麼? – PLui

0

其他的答案。

但是,您在每次更改呼叫時都會設置一個新的時間間隔,而不清除舊的時間間隔,因此如果某人選擇「1」,然後選擇「5」,則每5分鐘會收到6個呼叫showDashboard。您需要捕獲間隔ID並在每次新的setInterval調用之前將其清除。

$(function() { 
    var dashboardRefreshInterval; 
    $(".refreshInterval").change(function(){ 
      clearInterval(dashboardRefreshInterval); 
      dashboardRefreshInterval = setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000)) 
    }); 
} 
+0

這是一個很好的觀點。但類似於@ aktee的解決方案,只有當下拉框更改時,纔會刷新。它似乎並沒有經常刷新。我在showDashboard中添加了一個console.log來確認它。 – PLui

+0

不,這將按選定的時間間隔進行刷新,並在下拉選擇更改時正確更改間隔。你的意思是說,直到第一次用戶做出選擇時,它纔開始刷新。 – jball

相關問題