2013-02-12 90 views
2

我创建了一个数组来存储选定文件的列表。那么,我必须诚实,我查阅了代码,当我意识到它为我的目的工作时,我使用了它。现在我需要访问这个数组以手动删除一些文件,但我已经尝试过使用每个扇区的索引,但这不起作用。如何读取JavaScript中的对象文件列表数组?

这是我如何创建数组和存储文件。

var files = []; 
$("button:first").on("click", function(e) { 
       $("<input>").prop({ 
        "type": "file", 
        "multiple": true 
       }).on("change", function(e) { 
        files.push(this.files); 
       }).trigger("click"); 

}); 

我怎么能读取阵列的文件,如果它包含一个对象的fileList或从阵列获得指数法[]?

回答

2

下面是我理解你的代码:

每次单击dom中的第一个按钮时,都会生成接受多个文件的文件输入对话框。返回时,对话将发出change事件,其中files变量(FileList对象)附加到函数上下文(this)。您的代码将新创建的FileList推入files阵列。由于输入接受多个文件,每个被推入files数组的对象都是一个FileList对象。

所以,如果你想通过文件阵列中的所有元素进行迭代,你可以把一个函数在change事件处理程序:

var files = []; 
$("button:first").on("click", function(e) { 
    $("<input>").prop({ 
     "type": "file", 
     "multiple": true 
    }).on("change", function(e) { 
     files.push(this.files); 
     iterateFiles(files); 
    }).trigger("click"); 
}); 


function iterateFiles(filesArray) 
{ 
    for(var i=0; i<filesArray.length; i++){ 
     for(var j=0; j<filesArray[i].length; j++){ 
      console.log(filesArray[i][j].name); 
      // alternatively: console.log(filesArray[i].item(j).name); 
     } 
    } 
} 

iterateFiles()功能我写filesArray[i][j]是不是一个真正的多维数组 - - 而是一个包含FileList对象的单维数组,其行为与数组非常相似......除了不能删除/拼接其中的项目 - 它们是只读的。

有关,为什么你不能删除查看更多资讯:How do I remove a file from the FileList

+2

让我告诉你:“有一天,我想在编程方面达到一半。”是的,我诚恳地说。读完这些之后,我了解到filelist对象是只读的,所以我不得不重新考虑如何发送额外的数据。所以,我创建了两个数组:一个包含文件索引,另一个包含用户想要删除的文件。我将这两个数据与objectFilelist通过ajax一起发送,并使用php文件,我完成所有的魔术。这是一件痛苦的事,但是,它可以被执行。非常感谢你。 – Leo 2013-02-13 03:40:24

+0

@MichaelVidal你是怎么做到的。我一直在寻找这种解决方案,但我无法做到。请帮帮我 – 2015-04-27 05:34:31

-1

像这样的东西?

for(var i = 0; i < files.length; i++) { 
    alert(files[i][0].name); 
    if (files[i][0].name == 'file.jpg') { 
     files.splice(i, 1) //remove the item 
    } 
} 

也就是说,由于您选择它的方式,每个FileList中总是有一个文件。因此,对于每个文件列表,您只对其中的第一个文件感兴趣。对于每一个文件,你可以得到的属性如下定义:http://help.dottoro.com/ljbnqsqf.php

1

由于您使用jQuery你可以使用$.grep

files=$.grep(files, function(elementOfArray, indexInArray){ 
     /* evaluate by index*/ 
     return indexInArray != someValue; 
     /* OR evaluate by element*/ 
     return elementOfArray != someOtherValue; 
}); 

API参考:http://api.jquery.com/jQuery.grep/

+0

我想用'Array.prototype.some'一个'FileList'对象,但它不是一个数组。我想我可以尝试转换它,但这个'grep'解决方案与我的'.... length> 0'成对配对给了我一个很好的布尔值。没有在API中看到这个功能,所以谢谢! – Pysis 2017-11-16 21:26:36

+0

@Pysis可以在Filelist或其他数组像对象上使用'[] .some.call()' – charlietfl 2017-11-16 21:40:50

相关问题