Hochladen von mehreren Dateien einzeln mit separaten Dropzones in einer form
Ich habe ein Formular, wo Sie ständig weitere Zeilen hinzufügen.
Eine Zeile enthält name und avatar, etc.
Den ich nutzen möchte Dropzone.js zu jeder avatar eine andere abwerfbaren Feld.
Immer wenn ich eine neue Zeile, ich bin momentan dabei, eine neue Dropzone-Bereich. Das ist in Ordnung, und funktioniert.
Allerdings, wenn ich das Formular Absenden, die Dateien sind nirgends zu finden. Ich kann verstehen, warum, weil die Datei, die Felder sind nicht in form, Sie sind an den Körper.
<form>
<div class="person" id="person_1">
<div class="avatar"></div>
<input type="text" name="name_1" />
</div>
<!-- then these are added via js -->
<div class="person" id="person_2">
<div class="avatar"></div>
<input type="text" name="name_2" />
</div>
<div class="person" id="person_3">...</div>
<div class="person" id="person_4">...</div>
<!-- etc -->
</form>
Ich bin initialisieren der dropzone auf der avatar
div.
Ist es möglich, fügen Sie Sie zur Datei Felder innen form?
Hier ist was Los in der JS. Es verdummt sich ein wenig für die Kürze.
(function(){
var count = 1;
var $form = $('form');
initDropzone( $('#person_1') );
function addPerson() {
count++;
var $personDiv = $('<div class="person" id="person_'+count+'">...</div>').appendTo($form);
initDropzone( $personDiv, count );
}
function initDropzone( $el, count ) {
$el.find('.avatar').dropzone({
autoProcessQueue: false,
uploadMultiple: false,
parallelUploads: 100,
maxFiles: 1,
url: '/' //dropzone requires a url param
});
}
$('#add_person').on('click', addPerson);
})();
- Sie könnten jQuery hören für ein submit-Ereignis aus Ihrer form, und reagieren durch ziehen am Dropzone-Felder in Ihrem Formular-element (organisiert aber Sie möchten), bevor du Sie abschickst. Alternativ, Sie können einen listener einrichten, die für jede Dropzone ist
init
Ereignis und behandeln Sie einzeln (dropzonejs.com/#toc_4) - "Immer wenn ich eine neue Zeile, ich bin momentan dabei, eine neue Dropzone-Bereich." Könnten Sie uns zeigen Sie Ihre JavaScript-code, der diese Aufgabe übernimmt? Sie sollten in der Lage sein zu fügt neue Dropzones, um etwas genauer zu sein als nur die
body
- Ich aktualisierte die Frage mit dem JS
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist nicht, dass die Felder an den Körper, aber dass das ganze Dropzone Upload-Prozess unterscheidet sich von einem normalen Formular.
Können Sie nicht mit Dropzone zu drop Dateien im browser, und verwenden Sie dann die normale form Einreichen, Einreichen.
Gibt es zwei Möglichkeiten, das zu erreichen, was Sie tun:
Lassen Sie sich nicht der Benutzer das Formular abschicken, bis alle Ihre Dateien in den Dropzones hochgeladen haben (oder noch besser: erstellen von Ereignis-Listenern auf allen Dropzones, Feuer, die
submit
Funktion auf dem Formular, sobald alle Dropzones hochgeladen haben). Sie benötigen zum speichern der Dateien auf dem server und warten Sie, bis die eigentliche form der Einreichung, die zum zusammenstellen der Daten.Dies ist mit Abstand die eleganteste Lösung, weil auf diese Weise die Dateien schon hochladen, während die Benutzer möglicherweise weiterhin Bearbeiten von Formular-Daten.
Erstellen eine Dropzone auf die tatsächliche form, die handhaben das ganze hochladen des Formulars per AJAX. (Siehe die Dokumentation für das). Wenn Sie möchten, verschiedene dropzone Ziele innerhalb, dropzone, müssen Sie erstellen Sie separat, und "delegieren" Sie die Datei fällt auf den Haupt-dropzone (im Grunde, nehmen Sie einfach das file-Objekt, und fügen Sie Sie zu den wichtigsten Dropzone).