我可以在$ .submit()中运行setTimeout / setInterval吗?

时间:2010-12-22 20:56:33

标签: javascript jquery

我这样做了吗?

var jForm= $("form:first");
jForm.submit(function( objEvent ) { setTimeout(somefunction(),500) });

表单用于使用不可见的iFrame上传文件。由于某种原因,上述尝试导致我无限循环......

我真的希望知道在使用jQuery操作submit时是否能够使用setTimeout调用函数。

注意:我之前已经提出this question,但我想我已经为我的问题提供了太多信息。

4 个答案:

答案 0 :(得分:3)

除非您阻止表单的默认提交操作,否则在setTimeout中的函数有时间运行之前,它将由该默认操作提交。

$('form:first').submit( function(e){
  e.preventDefault();
  setTimeout( someFunction, 500 ); // NOT setTimeout(somefunction(),500)
});

另外,请勿在{{1​​}}中调用该功能。传递对函数的引用(如上所述)。

为:

setTimeout()

好:

setTimeout( 'myfunc()', 500 ); // bad, uses eval, runs in global scope
setTimeout( myfunc(), 500 ); // bad, runs function immediately, then passes
                             // returned value into setTimeout -- unless you
                             // are returning a function from myFunc

答案 1 :(得分:0)

您可能希望在函数末尾返回false以防止表单提交,否则您将遇到竞争条件。

提交表单后,页面将开始在其他位置导航(表单的操作)。除非您停止提交表单,否则somefunction()可能无法执行,或者可能无法完成执行。

var jForm= $("form:first");
jForm.submit(function(objEvent) {
  setTimeout(somefunction, 500);
  return false; // Prevent form submission. Alternatively, you could call objEvent.preventDefault();
});

答案 2 :(得分:0)

jForm.submit(function( objEvent ) { setTimeout("somefunction()",500) });

否则你会立即调用某个函数并以500 milisecs

执行结果

答案 3 :(得分:0)

您似乎混淆了setTimeout和setInterval。 setInterval 创建一个循环,所以如果你传递一个自己调用setInterval的函数setInterval,你就会遇到麻烦。