我正在尝试使用下拉菜单,让用户选择页面刷新的频率。我在$(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'
有什么想法吗?
答案 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))
});
}