加载表单后初始化dropzone

时间:2017-09-10 17:57:12

标签: javascript jquery dropzone.js

我正在使用jquery dropzone.js。要加载表单,我正在使用mustache,如下所示。但是在页面完全加载后我无法获得dropzone,因为那一刻没有加载任何表单。是否可以选择在加载后启动dropzone?

带有以下形式的小胡子文件:

<div class="col-lg-12">
    <div class="ibox float-e-margins">
        <div class="ibox-title">
            <h5>Dropzone Area</h5>
            <div class="ibox-tools">
                <a class="collapse-link">
                    <i class="fa fa-chevron-up"></i>
                </a>
                <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                    <i class="fa fa-wrench"></i>
                </a>
                <ul class="dropdown-menu dropdown-user">
                    <li><a href="#">Config option 1</a>
                    </li>
                    <li><a href="#">Config option 2</a>
                    </li>
                </ul>
                <a class="close-link">
                    <i class="fa fa-times"></i>
                </a>
            </div>
        </div>
        <div class="ibox-content">
            <form id="my-awesome-dropzone" class="dropzone" action="#">
                <div class="dropzone-previews"></div>
                <button type="submit" class="btn btn-primary pull-right">Submit this form!</button>
            </form>
            <div>
                <div class="m text-right"><small>DropzoneJS is an open source library that provides drag'n'drop file uploads with image previews: <a href="https://github.com/enyo/dropzone" target="_blank">https://github.com/enyo/dropzone</a></small> </div>
            </div>
        </div>
    </div>
</div>

加载小胡子并初始化dropzone的功能:

<script>
    $( document ).ready(function() {
        // get the mustache
        loadDropZone();

        // HOW CAN I DO THIS AFTER THE DROPZONE FORM IS CREATED?
        // init dropzone
        Dropzone.options.myAwesomeDropzone = {

            autoProcessQueue: false,
            uploadMultiple: true,
            parallelUploads: 100,
            maxFiles: 100,

            // Dropzone settings
            init: function () {
                var myDropzone = this;

                this.element.querySelector("button[type=submit]").addEventListener("click", function (e) {
                    e.preventDefault();
                    e.stopPropagation();
                    myDropzone.processQueue();
                });
                this.on("sendingmultiple", function () {
                });
                this.on("successmultiple", function (files, response) {
                });
                this.on("errormultiple", function (files, response) {
                });
            }

        }

    });

    function loadDropZone() {
        $.get(websiteUrl + 'storages/mustache/image-drop-zone.mst', function(template) {
            Mustache.parse(template); // speeds up future uses
            var rendered = Mustache.render(template);
            $('#block-container').append(rendered);
        });
    }
</script>

1 个答案:

答案 0 :(得分:2)

您应该以编程方式初始化dropzone,而不是使用选项和自动发现功能。

应该是这样的:

<script>
    Dropzone.autoDiscover = false; // This is optional in this case

    $( document ).ready(function() {
        // get the mustache
        loadDropZone();

        // Now that the form is loaded you can initialize dropzone by creating an instance
        // init dropzone
        var myAwesomeDropzone = new Dropzone("form#my-awesome-dropzone", {

            autoProcessQueue: false,
            uploadMultiple: true,
            parallelUploads: 100,
            maxFiles: 100,

            // Dropzone settings
            init: function () {
                var myDropzone = this;

                this.element.querySelector("button[type=submit]").addEventListener("click", function (e) {
                    e.preventDefault();
                    e.stopPropagation();
                    myDropzone.processQueue();
                });
                this.on("sendingmultiple", function () {
                });
                this.on("successmultiple", function (files, response) {
                });
                this.on("errormultiple", function (files, response) {
                });
            }

        }

    });

    function loadDropZone() {
        $.get(websiteUrl + 'storages/mustache/image-drop-zone.mst', function(template) {
            Mustache.parse(template); // speeds up future uses
            var rendered = Mustache.render(template);
            $('#block-container').append(rendered);
        });
    }
</script>