![](/img/trans.png)
[英]Use value from dropdown to set setInterval var in Javascript
[英]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.