dropzone.js - 上传所有文件后如何做某事

Kem*_*min 48 javascript jquery dropzone.js

我使用dropzone.js作为我的拖放文件上传解决方案.在上传所有文件后,我遇到了需要调用函数的问题.在这种情况下,

Dropzone.options.filedrop = {
    maxFilesize: 4096,
    init: function () {
        this.on("complete", function (file) {
            doSomething();
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

将为每个已上载的文件调用doSomething().如何在上传所有文件后调用函数?

eny*_*nyo 113

编辑:现在有一个queuecomplete事件,你可以用于这个目的.


上一个答案:

保罗B.的答案是有效的,但更简单的方法是检查队列中是否还有文件,或者在文件完成时上传.这样您就不必自己跟踪文件:

Dropzone.options.filedrop = {
  init: function () {
    this.on("complete", function (file) {
      if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0) {
        doSomething();
      }
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,同时还有一个名为`queuecomplete`的额外事件,当队列完成上传时会触发. (3认同)

Sha*_*der 41

只需使用queuecomplete就是它的用途,它就这么简单.查看文档http://www.dropzonejs.com/

queuecomplete >队列中的所有文件上传完成后调用.

      this.on("queuecomplete", function (file) {
          alert("All files have uploaded ");
      });
Run Code Online (Sandbox Code Playgroud)

  • 有谁知道这是否应该为队列中的每个文件触发?这就是我正在经历的行为。 (3认同)

Pau*_*uno 11

可能有一种方法(或三种方法)可以做到这一点......但是,我发现你的目标有一个问题:你怎么知道所有文件的上传时间?以更有意义的方式改写......你怎么知道"所有"意味着什么?根据文档,init在Dropzone本身的初始化时调用,然后设置complete事件处理程序,以便在上传的每个文件完成时执行某些操作.但是,用户给出了什么机制来让程序知道他何时删除了他打算丢弃的所有文件?如果您假设他/她将进行批量删除(即,在一次删除操作中同时删除Dropzone 2 - 任意数量的文件),则以下代码可能/可能应该工作:

Dropzone.options.filedrop = {
    maxFilesize: 4096,
    init: function () {
        var totalFiles = 0,
            completeFiles = 0;
        this.on("addedfile", function (file) {
            totalFiles += 1;
        });
        this.on("removed file", function (file) {
            totalFiles -= 1;
        });
        this.on("complete", function (file) {
            completeFiles += 1;
            if (completeFiles === totalFiles) {
                doSomething();
            }
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

基本上,您可以在有人添加/删除Dropzone中的文件时进行监视,并在闭包变量中保留计数.然后,当每个文件下载完成后,您将增加completeFiles进度计数器var,并查看它是否等于您一直在观察和更新的totalCount,因为用户在Dropzone中放置了内容.(注意:从未使用过插件/ JS库.所以最好猜测你可以做些什么来获得你想要的东西.)


Kev*_*use 5

添加了“queuecomplete”事件。见问题 317