繁体   English   中英

使用下拉菜单中的值通过jQuery更改设置setInterval

[英]Use value from dropdown to set setInterval with jQuery change

我正在尝试一个下拉菜单,该菜单可让用户选择页面刷新的频率。 我在$(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' 

任何想法?

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

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

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

尝试这个:

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

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

});

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

同时将此showDashboard()更改为showDashboard尝试一下

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

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

但是,您为每个变更呼叫设置了一个新间隔,而不会清除旧的呼叫,因此,如果有人选择“ 1”然后选择“ 5”,则每5分钟将有6次呼叫到showDashboard 您需要捕获间隔ID并在每次新的setInterval调用之前将其清除。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM