2010-12-22 56 views
0

我正在做對嗎?

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

表單用於使用不可見的iFrame上載文件。上面的嘗試已導致我出於某種原因無限循環...

我真的很想知道,如果我能夠在使用jQuery進行提交時調用setTimeout函數。

注:我以前曾提出this question,但我想我已經爲我的問題提供了太多的信息。

回答

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

否則就會立即撥打somefunction,除非你防止默認提交表單的動作執行結果500 milisecs

+0

如果你做了`setTimeout(somefunction,500)`並且避免了`eval`的惡意,那將會更好。 – lonesomeday 2010-12-22 21:01:36

+0

或`jForm.submit(function(objEvent){setTimeout(function(){somestatements ...;},500)});` – mplungjan 2010-12-23 17:55:45

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(); 
});
3

,將通過默認操作的功能之前提交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); 
0

你看起來的setTimeout和setInterval被混合起來。 setInterval 創建了一個循環,所以如果你傳遞一個函數setInterval來調用setInterval函數,那麼你就要問題了。

相關問題