2010-10-31 66 views
3

我這一段腳本(本地拼命地跑):JavaScript的 - 的setInterval功能不正常

<script> 

last = 0; 

function uploadnew(){ 

var randomnumber=Math.floor(Math.random()*6); 
if(randomnumber != last){ 
    document.forms['f'+randomnumber].submit(); 
} else { uploadnew(); } 

} 

setInterval (uploadnew(), 1000*60*5); 

</script> 

但似乎setInterval的是不工作/發送表單功能不起作用......

任何幫助將不勝感激!

謝謝!

+0

如果您將表單提交到同一個窗口,它會加載一個新頁面並停止時間間隔 – mplungjan 2010-10-31 17:25:14

+0

我知道。我將它加載到iframe中。 – Paul 2010-10-31 17:31:09

回答

9

你需要調用setInterval()沒有括號你的函數,就像這樣:

setInterval(uploadnew, 1000*60*5); 

使用圓括號你調用它立即和分配結果undefined)在間隔上運行,而不使用括號來傳遞函數本身,而不是結果的功能。

2

使用

setTimeout (expression, timeout); 
5

您需要的setInterval調用中uploadnew後刪除()

setInterval (uploadnew, 1000*60*5); 

在JavaScript中,函數是可以傳遞給其他函數第一類對象。在這個例子中,你想將函數本身傳遞給setInterval,而不是先調用它,然後傳遞它的返回值。

不建議使用setInterval ("uploadnew()", 1000*60*5);,因爲它是eval的「隱藏」形式。 Eval is evil and you shouldn't use it if you don't have to.

3

您需要傳遞函數的引用而不是調用它。

此:

setInterval (uploadnew(), 1000*60*5); 

應該是:

setInterval (uploadnew, 1000*60*5); 

如果你要稱呼它爲你,你就需要有uploadnew()功能要傳遞給setInterval

function uploadnew() { 
    return function(){ 
     var randomnumber=Math.floor(Math.random()*6); 
     if(randomnumber != last) { 
      document.forms['f'+randomnumber].submit(); 
     } else { uploadnew()(); } 
    } 
} 

請注意對遞歸調用的更改。