3

用户可以通过两种方式启动文件传输:拖放到小部件,或使用多文件输入按钮。我喜欢如何使用多文件输入,它将文件名字符串替换为智能的“选择的 8 个文件”或其他内容。

为此,必须填充输入。我不想从 drop 事件中实际创建 xhr2 对象,我只想将其 fileList 传递到输入元素并通过输入的“change”事件触发 xhr2。

这是一些框架代码(jQuery 用于事件绑定,但 addListener 应该工作相同):

domNode.defaultUI.on("drop", "#progOver", function(evt) {
  evt.preventDefault();
  evt.stopPropagation();
  function sendFiles() {
    var fileList = evt.originalEvent.dataTransfer.files;
    document.getElementById('files-upload').files = fileList;
  }
  if (someCondition) {
    sendFiles();
  }
});

domNode.defaultUI.on("change", '#files-upload', function(evt) {
  console.log(evt.target.files);  // fileList object in Chrome, empty (prototype) fileLIst in Firefox
});

我知道 fileList 对象本身是只读的,我怀疑 Chrome 的设计目的是说“是的,那个 fileList 没有被篡改,让我们允许它吧”,而 Firefox 的设计目的是说“哇哦巴士。你试图用一些对象更新我可爱的安全文件输入?我不知道那个臭对象是从哪里来的,拒绝!

所以问题有两个:

  1. 我的上述假设正确吗?这就是为什么我不能使输入的“文件”属性等于文件列表的原因吗?

  2. 是否有更新输入的 files 属性的替代方法(而不仅仅是尝试将值添加到属性中)?能够并行更新多文件输入节点真是太好了。

4

0 回答 0