2013-07-10 55 views
1

这可能是一个愚蠢的问题,但我有一个每隔30秒进行一次保存的setInterval。setInterval在刷新时执行

setInterval(SaveContent(true), 30000); 

我也试过

window.setInterval(SaveContent(true), 30000); 

setTimeout(setInterval(SaveContent(true), 30000), 30000); 
window. setTimeout(setInterval(SaveContent(true), 30000), 30000); 

setInterval的原因正在执行SaveContent当我刷新页面,我不知道。我虽然想在做任何事情之前等待30秒?

回答

3

尝试:

setInterval(function() {SaveContent(true)}, 30000); 

你不能直接将参数传递给函数调用,所以你需要将它嵌入在一个匿名函数。

()函数名称调用它并返回一个值,在这种情况下返回setInterval函数。

您也可以选择这样调用它:

setInterval(SaveContent, 30000); 

,然后在你的函数:

function SaveContent(b) { 

    if (typeof b === 'undefined') b = true; //defaults to true 

    // ... 

} 
3

你想给一个函数传递给setInterval

setInterval(function(){ SaveContent(true); }, 30000); 

方式你现在拥有它,你立即执行SaveContent(true),然后将它的返回值传递给setInterval

+0

OK所以这是我cannnot接受直到7分钟的答案。但我之前做过类似的事情。我在那里定义了一个函数'function autoSave(){SaveContent(true)}',并将它传递给setInterval'setInterval(autoSave,30000)',但它不起作用。 –

+0

只是好奇:我在此之前发布了我的答案,这是怎么回事,用相同的点呢? – K3N

+1

@ Ken-AbdiasSoftware:它们以每页加载的随机顺序出现。 – Ryan

0

在jQuery中可以使用$.proxy传递函数与预定义的说法:

setInterval($.proxy(SaveContent,null,true), 30000) 
+1

或使用'SaveContent.bind(null,true)'。 jQuery绝对不会为你节省很多输入,而不是在这里输入函数... – Ryan

+0

@minitech:是的,那也应该这样做。我通常会用原生'bind'发布答案,但人们会说“它与旧浏览器不兼容”,但“有一个[polyfill](https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/Function/bind)“等,等等。 – elclanrs