2011-06-14 108 views
1

我试图让一个简单的脚本来工作,但在某个地方我必须做错了,因为它不工作!我只是想设置一个调用函数的间隔时间。请提供一些帮助。也许不是最好的解决方案,但我是新手。setInterval调用函数的问题

$(document).ready(function() { 

startInterval(); // activate timer 

function startInterval() { 
var t = setInterval("autoSave", 20000); 
} 

function autoSave() { 
alert("test"); 
} 

}); 
+1

还要注意的是,如果你决定参数传递给函数'autoSave',创造像这样的匿名函数: '变种T =的setInterval(函数(){ autoSave(param1,param2)},20000);' – Darcy 2011-06-14 17:41:15

回答

0

1)更好的做法是使t - 全局,否则它不会在startInterval()函数外部访问。但你需要它来清除间隔

即声明var t; function startInterval();

2之前)认为:t = setInterval('autoSave()', 20000);

+0

如果我输入var t = setInterval('autoSave()',2000),那么间隔是否会开始?在$(document).ready(function(){... – 2011-06-14 17:54:31

+1

之后它工作时,我只是键入var t = setInterval(autoSave,2000); – 2011-06-14 17:59:15

4

删除“”,并使其成为函数的参考。

function startInterval() { 
    var t = setInterval(autoSave, 20000); 
    //     ^now you have a reference to 
    //     autoSave and setInterval knows 
    //     what to execute 
} 
6

无论这些人会工作,但不是你有什么

// Pass the real function 
function startInterval() { 
    var t = setInterval(autoSave, 20000); 
} 

// THIS MAY NOT WORK 
// eval 
function startInterval() { 
    var t = setInterval("autoSave()", 20000); 
} 
// 

// Anonymous function 
function startInterval() { 
    var t = setInterval(function() { autoSave(); }, 20000); 
} 

这里的推理:如果直接传递一个函数,它会调用它。但是,如果你传递一个字符串,它将在eval超时时间结束时返回一个函数 - 在你的情况下返回一个函数,而在第二种情况下返回评估函数(注意圆括号)

+0

嗯,我从一开始就有括号,现在我把它们放回去,但它仍然不起作用!? – 2011-06-14 17:30:34

+0

嗯,非常有趣,我认为在过去几个月里有所改变,因为第二种方法曾用于所有浏览器。无论如何,第一种方法是更好的做法。另请参阅第三个选项的更新答案。 – 2011-06-14 17:40:32