我正在做對嗎?
var jForm= $("form:first");
jForm.submit(function(objEvent) { setTimeout(somefunction(),500) });
表單用於使用不可見的iFrame上載文件。上面的嘗試已導致我出於某種原因無限循環...
我真的很想知道,如果我能夠在使用jQuery進行提交時調用setTimeout函數。
注:我以前曾提出this question,但我想我已經爲我的問題提供了太多的信息。
我正在做對嗎?
var jForm= $("form:first");
jForm.submit(function(objEvent) { setTimeout(somefunction(),500) });
表單用於使用不可見的iFrame上載文件。上面的嘗試已導致我出於某種原因無限循環...
我真的很想知道,如果我能夠在使用jQuery進行提交時調用setTimeout函數。
注:我以前曾提出this question,但我想我已經爲我的問題提供了太多的信息。
jForm.submit(function(objEvent) { setTimeout("somefunction()",500) });
否則就會立即撥打somefunction,除非你防止默認提交表單的動作執行結果500 milisecs
您可能希望在函數的末尾返回false以防止表單提交,否則您會遇到競爭條件。
當表單被提交時,頁面將開始導航到其他地方(表單的動作)。除非您停止提交表單,否則somefunction()可能無法執行,或者可能無法完成執行。
var jForm= $("form:first");
jForm.submit(function(objEvent) {
setTimeout(somefunction, 500);
return false; // Prevent form submission. Alternatively, you could call objEvent.preventDefault();
});
,將通過默認操作的功能之前提交setTimeout
有時間運行。
$('form:first').submit(function(e){
e.preventDefault();
setTimeout(someFunction, 500); // NOT setTimeout(somefunction(),500)
});
另外,不要調用函數中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
好:
setTimeout(myfunc, 500); // function runs after 500 msec delay
setTimeout(function(){ // anonymous function, works fine
do_this();
do_that();
}, 500);
setTimeout(function myfunc(){ // or name the function, easier for debugging
do_this();
do_that();
}, 500);
你看起來的setTimeout和setInterval被混合起來。 setInterval 創建了一個循環,所以如果你傳遞一個函數setInterval來調用setInterval函數,那麼你就要問題了。
如果你做了`setTimeout(somefunction,500)`並且避免了`eval`的惡意,那將會更好。 – lonesomeday 2010-12-22 21:01:36
或`jForm.submit(function(objEvent){setTimeout(function(){somestatements ...;},500)});` – mplungjan 2010-12-23 17:55:45