2012-12-04 69 views
0

我有顯示文件上傳到服務器上的某個功能:如何識別哪個文件正在使用事件?

function progress(event) { 
... 
} 
... 
for (var i = 0; i<files.length; i++) { 
    xhr.upload.onprogress = progress; 
} 

進步功能是循環,併爲每個文件執行一次。 正在進行的功能我想寫出多少百分比上傳,我可以做一個文件,但如果我上傳不是一個文件,那麼我不知道如何爲每個文件取得進展。 我可以將循環的參數添加到進度函數嗎?

回答

1

您可以使用匿名函數給進步功能附加參數:

function progress(event, file) { 
    ... 
} 

for (var i = 0; i<files.length; i++) { 
    xhr.upload.onprogress = function(event) { 
     progress(event, files[i]); 
    } 
} 

但這代碼將無法工作,因爲進步每次都會帶上一個文件項目。爲了避免它,你必須使用一個封閉:

function progress(event, file) { 
    ... 
} 

for (var i = 0; i<files.length; i++) { 
    (function(xhr, file) { 
     xhr.upload.onprogress = function(event) { 
      progress(event, file); 
     } 
    })(xhr, files[i]); 
} 

P. S.對不起,我的第一個anwser錯了,我已經刪除了它。

+0

спасибо)但我可以做到這一點沒有匿名功能? – iamart

+0

什麼?如果在閉包中定義_progress_函數,它將有權訪問父上下文(_xhr_和_file_變量)。但我認爲在一般情況下這不是一個好主意:在每次循環迭代中,都會在內存中創建新函數。 Пожалуйста:) –