Dropzone:动态更改acceptedFiles

时间:2016-05-29 12:58:58

标签: jquery dynamic dropzone.js

我试图更改之前创建的Dropzone的acceptedFiles选项。

这就是我设置选项的方式:

$myDropzone.options.acceptedFiles = '.jpg, .png';

这是生成的Dropzone:

var $myDropzone = $("#my-dropzone");
$myDropzone.dropzone({
    maxFiles: 100,
    maxFilesize: 32,
    acceptedFiles: ".jpg"});

产生的错误是:

  

TypeError:$ myDropzone.options未定义

更新

似乎没有运行任何错误:

$myDropzone.options = { acceptedFiles: '.jpg, .png' };

但是接受新文件类型也没有变化。

这里是游乐场示例:http://codepen.io/anon/pen/GqqLGo

6 个答案:

答案 0 :(得分:3)

使用Dropzone的文档中提到的接受回调函数可以正常工作,但它并不限制用户文件资源管理器中显示的文件类型。它仅在用户选择后丢弃文件,如果它没有可接受的文件扩展名。相反,请完成以下步骤。

  1. 更改代码中某处隐藏输入的accept属性,以便在初始化dropzone之后,但在用户可以使用dropzone之前触发它。这将限制用户可以选择的文件类型。

    $('.dz-hidden-input').attr('accept', '.pdf, .doc, .docx');
    var mediaType = 'document';
    
  2. 在用户添加文件后更改acceptedFiles选项,以告知Dropzone可以接受哪些文件类型。从技术上讲,这可以添加到发送文件之前触发的任何Dropzone事件回调中。

    $('#dropzone').dropzone({
        acceptedFiles: 'image/*',
        init: function () {
            this.on('addedfile', function (file, xhr, formData) {
                if (mediaType == 'document') {
                    this.options.acceptedFiles = '.pdf, .docx, .doc';
                }
            });
        }
    });
    

答案 1 :(得分:2)

我自己最终使用了这个

$("input").each(function() 
{
    var type = $(this).attr('type');
    if(type == "file")
    {
        $(this).attr("accept", ".pdf");
    }
});

答案 2 :(得分:0)

您无法动态更改属性acceptedFiles。但你可以这样做:

var acceptedTypes = ['jpg','png']

$('#dropzone').dropzone({
url: url,
accept: function(file, done) {
            if ($.inArray(file.name.slice(-3), acceptedTypes ) >= 0) {
                //accepted file
                done();
            }
            else {
                //Unaccepted file revert
                this.removeFile(file);
            }
       }
});

答案 3 :(得分:0)

这对我有用

Dropzone.options.fileupload = {
        acceptedFiles: 'image/*,.mp3',
        maxFilesize: 100 // MB
    };

答案 4 :(得分:-1)

$myDropzone是一个jQuery-Resultset而不是Dropzone实例。

在Dropzone的网页上,您可以在Version 2.0附近找到此信息:

  

另一件事情是,Dropzone不再将其实例存储在元素的data属性中。因此,要为元素获取Dropzone,请立即执行此操作:

// DEPRECATED, do not use:
$("#my-dropzone").data("dropzone"); // won't work anymore  
// Do this now:   
Dropzone.forElement(element); // Providing a raw HTMLElement
// or
Dropzone.forElement("#my-dropzone"); // Providing a selector string.

如果要访问分配给给定元素的dropzone元素,则需要使用Dropzone.forElement(element);

要访问或更改jQuery结果集中元素的选项,您需要这样做:

Dropzone.forElement($myDropzone.get(0)).options.acceptedFiles = '.jpg, .png';

答案 5 :(得分:-2)

更改所需类型的2°参数:

myDropzone.hiddenFileInput.setAttribute("accept", '.png,.jpg');