2012-12-22 52 views
10
function tryToDownload(url) 
{ 

     oIFrm = document.getElementById('myIFrm'); 
     oIFrm.src = url; 
     // alert(url); 
     // url=escape(url); 

     setTimeout(deletefile(url), 25000); 
} 

以下是deletfile功能爲什麼settimeout不會延遲函數執行?

function deletefile(url){ 

$.ajax({ 
    type:'post', 
    url: "<%= addToDoDeleteDownloadFile %>", 
    data:{filename:url}, 
    type : "GET", 
    timeout : 20000, 
    dataType : "text", 
    success : function(data) { 
     alert("success"); 

    } 
    }); 
} 

以上是我的jQuery和IM經過25第二通話在一端的功能,但它的一些如何不延遲DELETEFILE(URL)功能,只需要執行after.So應該是什麼問題?

+0

可能重複(http://stackoverflow.com/questions/4128938/javascript-settimeout) – Fraser

+1

@Fraser:這不是真的一個重複的恕我直言。 – Matt

回答

19

在這一行中,您正在調用您的函數並將其結果傳遞給setTimeout()

setTimeout(deletefile(url), 25000); 

如果要延遲執行,加一個包裝函數:

setTimeout(function(){ deletefile(url); }, 25000); 

編輯提出@Petah

一種替代方案:

setTimeout(deletefile, 25000, url); 

所有參數遲到後傳給setTimeout(),會的在執行時傳遞給函數。因此,在這種情況下,您將參考傳遞給函數,延遲,然後按照該順序將參數傳遞給函數!

請注意,根據MDN這種傳遞參數的方式在IE9之前不會在IE中工作。

+0

@Bhavik Kama:如果你有'foo(deletefile(url))',那麼會立即調用'deletefile'並將其返回值傳遞給'foo',對吧?正如Sirko所說的,'setTimeout'完全一樣。 –

+2

或....'setTimeout(deletefile,25000,url)' – Petah

+0

@Petah,將其他參數傳遞給該函數在Internet Explorer中不起作用 –

3

這是因爲您正在調用該函數,並在setTimeout調用中使用返回值。包裝在一個匿名函數,以便它是由所謂的setTimeout:

function tryToDownload(url) { 

    oIFrm = document.getElementById('myIFrm'); 
    oIFrm.src = url; 
    // alert(url); 
    // url=escape(url); 

    setTimeout(function() { deletefile(url); }, 25000); 

} 
[Java腳本的setTimeout]的
+0

thnx男人......它的工作 –