【发布时间】:2014-03-29 16:36:48
【问题描述】:
我有一个表单,您可以在其中不断添加更多行。
一行包含姓名和头像等。
我想使用 Dropzone.js 让每个头像成为不同的可放置字段。
每当我创建一个新行时,我都会创建一个新的 Dropzone 区域。这很好,并且有效。
但是,当我提交表单时,找不到文件。我可以理解为什么,因为文件字段不在表单中,它们被附加到正文中。
<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>
我正在初始化 avatar div 上的 dropzone。
是否可以将它们添加到表单内部的文件字段中?
这是 JS 中发生的事情。为了简洁起见,它被简化了一点。
(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);
})();
【问题讨论】:
-
您可以让 jQuery 从您的表单中侦听提交事件,并在提交之前通过将 Dropzone 字段拉入您的表单元素(按您的意愿组织)来做出反应。或者,您可以为每个 Dropzone 的
init事件设置一个侦听器并单独处理它们 (dropzonejs.com/#toc_4) -
"每当我创建一个新行时,我就是在创建一个新的 Dropzone 区域。"您能否向我们展示您处理此问题的 JavaScript 代码?您应该能够将新的 Dropzones 附加到比
body更具体的内容 -
我用JS更新了问题
标签: javascript jquery forms file-upload dropzone.js