3

是否可以拆分一个FileList实例(从一个放置事件,event.dataTransfer.fileList),并将其中的每个文件分配给一个单独 <input type="file" ... />的元素?

例如,要将放置事件中的所有文件(1 个或多个...)分配给输入元素fileInputElement,您将:

function dropHandler(event) {
  fileInputElement.files = event.dataTransfer.files;
}

我正在寻找类似的东西:

function dropHandler(event) {
  // assume fileEls is an array of input[type=file] elements
  for (var i = 0; i < event.dataTransfer.files.length; i++) {

    // yep, FileList.push doesn't exist..
    fileEls[i].files.push(event.dataTransfer.files.item(i));

    // and this (imagined) FileList constructor is not available...
    fileEls[i].files = new FileList([event.dataTransfer.files.item(i)]);
  }
}

一个迹象表明不行,不能这样做......

4

2 回答 2

6

FileList您可以通过DataTransfer创建一个新的

function dropHandler(event) {
  // assume fileEls is an array of input[type=file] elements
  for (var i = 0; i < event.dataTransfer.files.length; i++) {

    // Create a new DataTransfer
    var dataTransfer = new DataTransfer();

    // Add the items
    dataTransfer.items.add(event.dataTransfer.files.item(i));

    // Get the FileList
    fileEls[i].files = dataTransfer.files;

  }
}
于 2019-04-06T19:14:29.203 回答
0

如果 fileEls 已经是一个数组,请尝试

fileEls.push(event.dataTransfer.files.item(i));

你也可以这样做:

fileEls[i].files = clone(event.dataTransfer.files.item);

网络上有许多克隆(最好是深度克隆)功能。

于 2016-07-13T17:54:04.700 回答