1

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

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

...刷新间隔在哪里...

<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

4 回答 4

4

我建议您以更清晰的方式编写代码(而不是单行)。这样更容易发现语法错误。

解决方法:(不好,检查编辑!

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

于 2012-10-11T17:25:25.337 回答
1

试试这个:

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

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

});
于 2012-10-11T17:10:29.537 回答
1

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

showDashboard() 也改变这个showDashboard 试试这个

$(".refreshInterval").change(function(){    
      setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000))
  });
于 2012-10-11T17:10:57.247 回答
0

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

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

$(function() {
    var dashboardRefreshInterval;
    $(".refreshInterval").change(function(){
           clearInterval(dashboardRefreshInterval);
           dashboardRefreshInterval = setInterval(showDashboard,parseFloat($(".refreshInterval").val())*60*1000))   
     }); 
}
于 2012-10-11T17:22:01.770 回答