在for循环中维护传递的i值

时间:2014-03-04 15:13:46

标签: jquery for-loop xmlhttprequest

所以我有一个我正在处理的多文件上传器,我无法维护i形式for循环。 基本上问题是我在progressHandler函数中传递了i值,但是每当progressHandler触发它时,它都会触发i的最后files.files.length值。

首先保持i值传递的最佳方法是什么?

for (var i = 0; i < files.files.length; i++) {
    ...
    var ajax = new XMLHttpRequest();
    ajax.upload.addEventListener("progress", function(event){progressHandler(event,i)}, false);
    ajax.addEventListener("load", function(event){completeHandler(event,i)}, false);
    ...
}

1 个答案:

答案 0 :(得分:0)

你需要在一个闭包中捕获我,查看here以获得使用它们的好指南。像这样:

for (var i = 0; i < files.files.length; i++) {
    ...
    (function (i) {
        var ajax = new XMLHttpRequest();
        ajax.upload.addEventListener("progress", function(event){progressHandler(event,i)}, false);
        ajax.addEventListener("load", function(event){completeHandler(event,i)}, false);
    }
    ...
}