Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple dropzone with single function

I have a form with multiple Dropzones for image upload. Below is my code:

HTML

<form>
    <input type="text">
    <div>
        <div>
            <div class="dropzone dropzone-previews" id="test-image1"></div>
            <div class="dropzone dropzone-previews" id="test-image2"></div>
        </div>
        <div>
            <div class="dropzone dropzone-previews" id="test-image3"></div>
            <div class="dropzone dropzone-previews" id="test-image4"></div>
        </div>
    </div>
</form>

JavaScript:

$(function () {
    Dropzone.options.testImage1 = {
        url: "test1.php",
        maxFiles : 10,
        paramName: "file1", 
        maxFilesize: 2,
    }
    Dropzone.options.testImage2 = {
        url: "test2.php",
        maxFiles : 20,
        paramName: "file2", 
        maxFilesize: 10,
    }
    Dropzone.options.testImage3 = {
        url: "test3.php",
        maxFiles : 30,
        paramName: "file3", 
        maxFilesize: 20,
    }
    Dropzone.options.testImage4 = {
        url: "test4.php",
        maxFiles : 40,
        paramName: "file4", 
        maxFilesize: 5,
    }       
});

Now I have 4 different Dropzone functions for 4 divs. This is working properly.

Actually In my project there is a lot of use of Image Upload & I will be using Dropzone multiple times on different pages.

My question is -- can I write one Dropzone function & pass the parameter values like Id, maxFiles, paramName, maxFilesize & may be others, so that I do not have to write multiple Dropzone functions ?

Thanks in advance.

like image 741
NitinS Avatar asked Feb 20 '26 10:02

NitinS


1 Answers

Well, I am not sure if this is what you are looking for but one thing it occurs to me is that you can use the divs ids to set the options, and then use that id in javascript to configure the dropzone element.

Here a generic example with the parameters you mention in your question using jQuery:

html:

<div class="dropzone" id="image-1-10-1"></div>
<div class="dropzone" id="image-2-20-2"></div>
<div class="dropzone" id="image-3-30-3"></div>
<div class="dropzone" id="image-4-40-4"></div>

js:

Dropzone.autoDiscover = false;

$('.dropzone').each(function(){
    var options = $(this).attr('id').split('-');
    var dropUrl = 'test' + options[1] + '.php';
    var dropMaxFiles = parseInt(options[2]);
    var dropParamName = 'file' + options[1];
    var dropMaxFileSize = parseInt(options[3]);

    $(this).dropzone({
        url: dropUrl,
        maxFiles: dropMaxFiles,
        paramName: dropParamName,
        maxFilesSize: dropMaxFileSize

        // Rest of the configuration equal to all dropzones
    });

});
like image 151
wallek876 Avatar answered Feb 23 '26 01:02

wallek876



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!