Javascript 调用函数的setInterval存在问题
我试图让一个简单的脚本工作,但在某个地方我一定做了一些错误,因为它不工作!我只想设置一个调用函数的时间间隔。我需要一些帮助。也许不是最好的解决办法,但我对这一点还不熟悉Javascript 调用函数的setInterval存在问题,javascript,jquery,Javascript,Jquery,我试图让一个简单的脚本工作,但在某个地方我一定做了一些错误,因为它不工作!我只想设置一个调用函数的时间间隔。我需要一些帮助。也许不是最好的解决办法,但我对这一点还不熟悉 $(document).ready(function() { startInterval(); // activate timer function startInterval() { var t = setInterval("autoSave", 20000); } function autoSave() { alert
$(document).ready(function() {
startInterval(); // activate timer
function startInterval() {
var t = setInterval("autoSave", 20000);
}
function autoSave() {
alert("test");
}
});
删除“”,并使其成为对函数的引用
function startInterval() {
var t = setInterval(autoSave, 20000);
// ^now you have a reference to
// autoSave and setInterval knows
// what to execute
}
删除“”,并使其成为对函数的引用
function startInterval() {
var t = setInterval(autoSave, 20000);
// ^now you have a reference to
// autoSave and setInterval knows
// what to execute
}
这两种方法中的任何一种都有效,但不是你所拥有的
// 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
它,这将在您的情况下返回一个函数,在我的第二种情况下返回已计算的函数(请注意括号)其中任何一个都可以工作,但不是您拥有的函数
// 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
它-在您的例子中,它返回一个函数,在我的第二个例子中返回已计算的函数(请注意括号)1)更好的做法是将t-global设置为全局,否则它将无法在startInterval()函数之外访问。但你需要它来清除间隔
i、 e.申报var t;函数startInterval()之前代码>
2) 考虑:t=setInterval('autoSave()',20000)代码>1)更好的做法是将t-global设置为全局,否则它将无法在startInterval()函数之外访问。但你需要它来清除间隔
i、 e.申报var t;函数startInterval()之前代码>
2) 考虑:t=setInterval('autoSave()',20000)代码>Hmmm,我从一开始就有括号,现在我把它们放回去了,但它仍然不起作用!?嗯,非常有趣,我认为在过去的几个月里有些变化,因为第二种方法在所有浏览器中都适用。无论如何,第一种方法是更好的实践。还有,第三个选项见我的更新答案。嗯,我从一开始就有括号,现在我把它们放回去了,但它仍然不起作用!?嗯,非常有趣,我认为在过去的几个月里有些变化,因为第二种方法在所有浏览器中都适用。无论如何,第一种方法是更好的实践。另外,关于第三个选项,请参见我的更新答案。还请注意,如果您决定将参数传递给函数autoSave
,则要创建一个匿名函数,如下所示:var t=setInterval(function(){autoSave(param1,param2)},20000)
还请注意,如果您决定将参数传递给函数autoSave
,则要创建这样一个匿名函数:var t=setInterval(function(){autoSave(param1,param2)},20000)如果我只键入var t=setInterval('autoSave()',2000),间隔是否会开始;在$(document).ready(function(){…)之后,当我刚刚键入var t=setInterval(autoSave,2000)时,它起作用;如果我刚刚键入var t=setInterval('autoSave()',2000),间隔是否会开始;在$(document).ready(function(){…,当我刚刚键入var t=setInterval(autoSave,2000)时,它起作用;