Comment puis-je corriger cette erreur "Dropzone déjà attachée"?

J'ai cet échantillon:

Lien

J'ai réussi à créer ce formulaire mais malheureusement cela ne fonctionne pas car je reçois une erreur.

Dropzone already attached.

CODE HTML:

<div class="dropzone dz-clickable" id="myDrop">
                                 <div class="dz-default dz-message" data-dz-message="">
                                      <span>Drop files here to upload</span>
                                 </div>
</div>

CODE JS:

Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("div#myDrop", { url: "/file/post"});

// If you use jQuery, you can use the jQuery plugin Dropzone ships with:
$("div#myDrop").dropzone({ url: "/file/post" });

J'ai mis en place {[3] } mais malheureusement ne fonctionne toujours pas.

Pouvez-vous me dire ce qui cause ce problème?

27
demandé sur Wai Ha Lee 2015-10-12 11:28:43

9 réponses

Vous devez utiliser soit

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

Ou

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

Pas les deux. Fondamentalement, ce que vous faites appelle la même chose deux fois.

10
répondu drys 2015-10-12 08:34:25

Définir globalement le code ci-dessous aidera:

Dropzone.autoDiscover = false;
94
répondu Syed 2016-04-26 14:46:02

Cette erreur peut également se produire lorsqu'un élément a déjà eu une classe dropzone.

Cependant, si cela est supprimé, le style par défaut ne s'appliquera pas après le lancement de Dropzone. Ma seule solution est de créer un style personnalisé pour cet élément.

5
répondu inmyth 2015-12-28 05:34:54

Après avoir cherché et essayé plusieurs solutions sur le net, voici l'une des meilleures solutions pour résoudre ce problème.

HTML

<div id="some-dropzone" class="dropzone"></div>

JavaScript

Dropzone.options.someDropzone = {
  url: "/file/post"
};
4
répondu George John 2017-04-05 14:49:11

C'est ma solution de contournement hackish. Il vérifie fondamentalement si dropzone est chargé en tant que DOM, et si ce N'est pas le cas, il en créera un.

    function dropzoneExists(selector) {
        var elements = $(selector).find('.dz-default');
        return elements.length > 0;
    }

    var exists = dropzoneExists('div#photo_dropzone');
    if(exists) return;

    $('div#photo_dropzone').dropzone({
       ...
       ...
    });

UPDATE : il est suggéré de comprendre pourquoi le dropzone est lancé deux fois. Corriger c'est la bonne façon, et cette réponse n'est qu'une solution de contournement techniquement débile.

3
répondu tsuz 2018-02-20 00:38:21

J'ai corrigé ce problème en éditant la dropzone.js. il suffit d'aller à dropzone.js et remplacer

if (this.element.dropzone) {
    throw new Error("Dropzone already attached.");
  }

Avec

if (this.element.dropzone) {
    return this.element.dropzone;
 }

Cette solution est à l'origine trouvé par Haskaalo, posté sur le github questions

3
répondu Jacky Supit 2018-04-19 08:44:53

Parfois, c'est parce que vous avez deux éléments html avec le même id dropzone.

<div id="dropzone" class="dropzone"></div>

<div id="dropzone" class="dropzone"></div>
0
répondu jjoselon 2017-07-11 14:12:23

Vous pouvez concatter votre id "myDrop" avec une valeur unique pour chaque instance de Dropzone.

Exemple:

 html: <span className="custom-file-input" id={"my-dropzone" + this.dropzoneId}></span>

 in func: 
 this.myDropzone = new Dropzone("span#my-dropzone" + this.dropzoneId, options);
0
répondu Yunay Hamza 2018-07-18 11:32:52
<script>
  Dropzone.autoDiscover = false;
  $(document).ready(function() {
    var myDrop= new Dropzone("#myDrop", {
      url: '/admin/media'
    });
  });
</script>

Au Lieu de

<script>
  $(document).ready(function() {
    Dropzone.autoDiscover = false;
    var myDrop= new Dropzone("#myDrop", {
      url: '/admin/media'
    });
  });
</script>
0
répondu Chung Nguyễn Trần 2018-08-11 04:01:27