【问题标题】:Combine normal form with multiple dropzones将正常形式与多个拖放区相结合
【发布时间】:2017-03-23 06:12:17
【问题描述】:

我想在一个表单中有多个放置区。所以我创建了一个表单

<form method="post">
    <div class="upload-files" data-name="mainImages[]" />
    <div class="upload-files" data-name="secImages[]" />
    <!-- could also be more -->

    <input type="text" name="test" />

    <input type="submit" />
</form>

dropzones 使用自己的 paramName 进行初始化。

var dropzones = [];
$('.upload-files').each(function() {
    dropzones.push(new Dropzone('#' + $dropzone.attr('id'), {
       paramName: $(this).data('name'),
       // ...
    }
);

this.dropzones = dropzones;

如何在一个请求中提交多个带有表单数据的 dropzone?目前它在提交时看起来像这样。

// submit
if (this.dropzones.length) {
    return true; // normal form submit without dropzone
}

// dropzone submit form
for (var i = 0, length = this.dropzones.length; i < length; i++) {
    // TODO combine files with correct paramNames
}

我知道https://github.com/enyo/dropzone/wiki/Combine-normal-form-with-Dropzone,但这仅适用于一种形式的一个放置区。

我认为我需要做的是在提交时将第二个,第三个,... dropzone 中的文件添加到第一个,但我不知道如何处理。

【问题讨论】:

    标签: javascript jquery dropzone.js


    【解决方案1】:

    我找到了一个使用多个 dropzone 的解决方案,在提交表单时,您需要执行以下操作。

    if (!this.dropzones.length) {
        // default form submit
        return true;
    }
    
    // submit over dropzone
    event.preventDefault();
    this.dropzones[0].processQueue();
    
    return false;
    

    这将处理第一个放置区。现在我们需要在sendingmultiple事件中将其他dropzones文件添加到提交中

    init: function() {
        this.on('sendingmultiple', function(data, xhr, formData) {
            // add other form fields
            $.each($form.serializeArray(), function(index, item) {
                formData.append(item.name, item.value);
            });
    
            // add other dropzone files
            for (var i = 1, length = this.dropzones.length; i < length; i++) {
                var files = this.dropzones[i].getQueuedFiles();
    
                for (var x = 0, fileLength = files.length; x < fileLength; x++) {
                    formData.append(
                        this.dropzones[i]._getParamName(x),
                        files[x],
                        files[x].name
                    );
                }
            }
        });
    }
    

    【讨论】:

    • 每个上传输入的自定义选项怎么样,例如一个只接受图像,另一个 zip 文件,一个有最大文件 1,其他最大文件 5 等等。
    • 您好!您将需要找到一种方法来指定每个输入的类型,例如:
      。然后相应地设置dropzone的acceptedFiles:
    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多