#javascript #jquery #dropzone.js
#javascript #jquery #dropzone.js
Вопрос:
Я хотел бы знать, как запустить Dropzone.js ‘ввод для загрузки файла по умолчанию? Это не так просто, как это:
window.dropCloud = = new Dropzone("#dropCloud", {...});
$(window.dropCloud.clickableElements[0]).trigger("click");
Теперь у меня нет никаких идей. В любом случае весь #dropCloud
контейнер скрыт, если это имеет значение.
Ответ №1:
Просто. В версии 4.0 вы можете сделать:
new Dropzone(".element", {
clickable: '.myTrigger'
});
new Dropzone(".element", {
clickable: ['.myTrigger', '.myOtherTrigger']
});
Ответ №2:
Кажется, это отлично работает для меня
var dropZone = new Dropzone($("#yourdropzonedivthinger").get(0), {
BLAH BLAH BLAH drop zone init stuff
});
//Call this anywhere in your code to manually trigger the dropzone file dialog popup thinger
dropZone.hiddenFileInput.click();
Ответ №3:
У меня была такая же проблема, и после долгих попыток я, наконец, нашел способ добавить дополнительные интерактивные области в существующую форму загрузки DropZone.
Примечание: должна быть хотя бы одна «оригинальная» интерактивная область, изначально прикрепленная clickable
параметром.
var DZ = Dropzone.forElement('.dropzone'); // Change selector to yours
var new_clickable = $('.new-clickable')[0]; // Change selector to yours
var new_listener = jQuery.extend({}, DZ.listeners[DZ.listeners.length - 1]);
new_listener.element = new_clickable;
DZ.clickableElements.push(new_clickable);
DZ.listeners.push(new_listener);
DZ.disable();
DZ.enable();
В основном то, что я делаю, это
- Добавьте новый интерактивный элемент DOM в
DZ.clickableElements
. - Клонируйте последний
DZ.listeners
объект массива. - Замените
element
свойство вnew_listener
объекте на наше. - Добавьте оба
new_clickable
иnew_listener
вернитесь к DZ. - Вызов
DZ.disable()
иDZ.enable()
который повторно подключает все обработчики событий.
Ответ №4:
Вздох… Я думаю, что это самое уродливое решение, которое я сделал… Во время запуска init fn.
this.clickableElements.push($("#anotherUploadBtn")[0]);
this.clickableElements.forEach(function(y){ ....
Есть идеи получше?
Ответ №5:
jQuery("#file-uploader").dropzone({
url: "/upload/",
paramName: "file",
maxFilesize: 5,
acceptedFiles: 'image/*,.jpeg,.jpg',
autoProcessQueue: true,
clickable: ['#file-uploader *','#file-uploader'],
init: function() {
this.hiddenFileInput.click(); //opens the file select dialogue
},
accept: function(file, done) {
// some code
done();
},
success: function (file, responseText)
{
var responseJSON = JSON.parse(responseText);
// some code
},
});
Комментарии:
1. Пожалуйста, предоставьте некоторые пояснения в дополнение к коду.
2. т.е. вы можете поместить приведенный выше код в функцию, при вызове функции выбранный файл откроется автоматически с инициализацией dropzone. Например, пользователь должен принять правила загрузки, прежде чем он / она сможет загружать файлы, после того, как он / она примет правила, нажав на кнопку «Принять», вы можете вызвать функцию для инициализации dropzone, и откроется окно выбора файла.