Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用文件列表进行多次拖放_Javascript - Fatal编程技术网

在javascript中使用文件列表进行多次拖放

在javascript中使用文件列表进行多次拖放,javascript,Javascript,我的网站上有一个简单的拖放页面。它允许拖放文件,下面的代码给了我一个拖放文件的列表 var files=e.target.files | |(e.dataTransfer&&e.dataTransfer.files) 到目前为止,一切顺利。问题是,当我拖放更多文件时,该文件对象将不会附加到我已经拥有的文件列表中。比如说,我第一次删除了两个文件。在这种情况下,files变量有2个文件。如果我删除第三个文件,e.target.files将只包含第三个文件 我尝试创建一个全局变量并执行+=来追加文件列

我的网站上有一个简单的拖放页面。它允许拖放文件,下面的代码给了我一个拖放文件的列表

var files=e.target.files | |(e.dataTransfer&&e.dataTransfer.files)

到目前为止,一切顺利。问题是,当我拖放更多文件时,该文件对象将不会附加到我已经拥有的文件列表中。比如说,我第一次删除了两个文件。在这种情况下,files变量有2个文件。如果我删除第三个文件,
e.target.files
将只包含第三个文件

我尝试创建一个全局变量并执行
+=
来追加文件列表。但是javascript默认将该变量视为字符串。因此,
var selectedFiles+=e.target.files
将文件列表视为字符串


我怎样才能做到每次删除文件时都附加一个文件列表?

解决了这个问题。这样创建了一个页面级变量

var selectedFiles=[]

然后使用下面的代码将文件推送到该列表

var files = e.target.files || (e.dataTransfer && e.dataTransfer.files);
//Loop through all dropped files
for (var i = 0; i < files.length; i++) {
    //Add files to the selected file list
    selectedFiles.push(files[i]);
}
var files=e.target.files | |(e.dataTransfer&&e.dataTransfer.files);
//循环遍历所有丢弃的文件
对于(var i=0;i

有不必要的循环,但我想我还不能解决这个问题

您需要将每个文件推送到您自己的列表中(
array
)。MDN有一个很好的例子

var\u文件=[];
功能dragOverHandler(ev){
//防止默认行为(防止打开文件)
ev.preventDefault();
}
函数dropHandler(ev){
//防止默认行为(防止打开文件)
ev.preventDefault();
if(ev.dataTransfer.items){
//使用DataTransferItemList接口访问文件
对于(变量i=0;i

将一个或多个文件拖到此拖放区域


我怀疑
e.target.files
是一个字符串,而不是一个列表。因此,您每次都必须将文件中的每个文件(
array.push()
)推送到您自己的列表中。谢谢。这帮我弄明白了。我将变量声明为
var selectedFileList而不是
var selectedFileList=[]。这就是它将变量视为字符串的原因。更新了声明并使用了推送而不是
+=
。这取决于您的浏览器支持
选择的文件。推送(…文件)
可能是一个选项。