使用下拉列表中的值来设置setInterval和jQuery更改

时间:2012-10-11 17:07:38

标签: javascript jquery drop-down-menu setinterval

我正在尝试使用下拉菜单,让用户选择页面刷新的频率。我在$(document).ready()中有以下代码:

$(".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' 

有什么想法吗?

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

试试这个:

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

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

});

答案 2 :(得分:1)

你需要将一个函数传递给事件..你在这里传递一个方法。

同时将此showDashboard()更改为showDashboard  试试这个

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

答案 3 :(得分:0)

指出你需要将函数传递给setInterval的其他答案是正确的。

但是,您在每次更改呼叫时都设置了一个新的时间间隔,而没有清除旧的时间间隔,因此如果有人选择“1”然后选择“5”,则每5分钟就会有6次呼叫showDashboard。您需要捕获间隔ID并在每次新的setInterval呼叫之前清除它。

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