多个dropzone.js - 单页

时间:2013-11-13 04:10:41

标签: javascript jquery dropzone.js

不是在单个dropzone元素上上传多个文件 - 是否可以在一个页面上有多个dropzone元素?

当有多个元素时,似乎dropzone在选择对话框后甚至没有触发,每个元素都有自己的dropzone初始化

3 个答案:

答案 0 :(得分:2)

使用dropzone的典型方法是创建一个带有dropzone类的表单元素:

<form action="/file-upload"
      class="dropzone"
      id="my-awesome-dropzone"></form>

就是这样。 Dropzone将找到具有类dropzone的所有表单元素,自动将其自身附加到其上,并将放入其中的文件上载到指定的操作属性。然后,您可以像这样访问dropzone元素:

// "myAwesomeDropzone" is the camelized version of the HTML element's ID
Dropzone.options.myAwesomeDropzone = {
  paramName: "file", // The name that will be used to transfer the file
  maxFilesize: 2, // MB
  accept: function(file, done) {
    if (file.name == "justinbieber.jpg") {
      done("Naha, you don't.");
    }
    else { done(); }
  }
};

答案 1 :(得分:1)

据我所知,您可以创建自己的dropzone,然后可以有多个dropzone元素。

// Dropzone class:
var myDropzone = new Dropzone("div#myId", { url: "/file/post"});

// jQuery
$("div#myId").dropzone({ url: "/file/post" });

答案 2 :(得分:0)

是的,您在单个页面上可以有无限数量的拖放区。

示例:

<form action="/controller/action">
    <div class="dropzoner" id="dropzone1"></div>
    <div class="dropzoner" id="dropzone2"></div>
</form>

<script>
Dropzone.autoDiscover = false; // Very important

InitializeDropzones();

function InitializeDropzones() { // You only need to encapsulate this in a function if you are going to recall it later after an ajax post.
    Array.prototype.slice.call(document.querySelectorAll('.dropzoner'))
        .forEach(element => {

        if (element.dropzone) {
            element.dropzone.destroy();
        } // This is only necessary if you are going to use ajax to reload dropzones. Without this, you will get a "Dropzone already exists" error.

        var myDropzone = new Dropzone(element, {
            url: "/controller/action",
            headers: {
                "headerproperty": value,
                "headerproperty2": value2
            },
        });
    })
}
</script>

一些注意事项可能会在处理多个放置区时为某人节省时间:

通过ajax重新加载任何附加了dropzone的元素后,您将需要将该dropzone重新初始化到元素上。

例如:

myDropzone.on("success", function (response) {
         toastr[show a toastr];
         $("#ContainerThatHasDropzones").load("/controller/action/" + id, function() {
         Dropzone.discover(); // This is very important. The dropzones will not work without this after reloading via ajax.
         InitializeDropzones();
});