我这样做了吗?
var jForm= $("form:first");
jForm.submit(function( objEvent ) { setTimeout(somefunction(),500) });
表单用于使用不可见的iFrame上传文件。由于某种原因,上述尝试导致我无限循环......
我真的希望知道在使用jQuery操作submit时是否能够使用setTimeout调用函数。
注意:我之前已经提出this question,但我想我已经为我的问题提供了太多信息。
答案 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,你就会遇到麻烦。