Javascript文件将商店密钥渲染为onload方法?

时间:2016-04-02 06:10:22

标签: javascript arrays

我想将一个密钥存储到数组中。

for (var i = 0; i < this.uploadedImages.length; i++) {
    var reader = new FileReader();
    var vm = this;
    reader.onload = function(e,i) {
        var imageSrc = e.target.result;
        vm.items.push( {image : imageSrc,index : i} );
    }
    reader.readAsDataURL(input.files[i]);
}

如何将i存储到items数组中的索引键。

现在我将4个元素传递给this.uploadedImages数组,当我检查items数组时,它将存储3存储到所有元素中。

{ {image : 'path',index : 3},{image : 'path',index : 3},
  {image : 'path',index : 3},{image : 'path',index : 3} }

我想要这样

{ {image : 'path',index : 0},{image : 'path',index : 1},
  {image : 'path',index : 2},{image : 'path',index : 3} }

如何做到这一点请帮助谢谢

1 个答案:

答案 0 :(得分:1)

这里有一个关闭问题。

onload回调在循环结束后执行,而i var的最后一个值为3。

一个快速而肮脏的解决方案是使用在循环迭代期间运行的另一个函数来包装回调函数,并使用当前值创建一个var。

reader.onload = function(idx){ 
        return function(e) {
            var imageSrc = e.target.result;
            vm.items.push( {image : imageSrc,index : idx} );
    }}(i)

检查这个类似的JSFIDDLE示例。