Я пытаюсь создать многопользовательский файл с заголовком для каждого изображения без использования стороннего плагина. Я довольно новичок в этом, и я не совсем понимаю, что я здесь делаю. Я взял фрагменты из разных источников, и я настраивал их. До сих пор мне удалось создать форму для каждого изображения, которое я занес в droparea, эта форма включает поле ввода для заголовка изображения и кнопку загрузки. Индивидуально каждая из этих вновь созданных форм успешно отправляет изображение и подпись на мой сценарий загрузки php
. Однако, когда я добавляю кнопку «Загрузить все», все, что я могу отправить, это массив изображений без титров. Может ли кто-нибудь дать понять, как двигаться дальше? Я googled вокруг и попытался реализовать различные подходы, но я продолжаю терпеть неудачу. На данный момент меня не интересует совместимость с браузером, я просто хочу сделать эту работу в Chrome и/или Firefox.jQuery: многократная загрузка файла с титрами
Вот мой upload.js
файл
$(document).ready(function(){
$.event.props.push('dataTransfer');
var fileList = new Array();
$("#droparea").bind('dragenter dragover', false).bind('drop', function(e){
$.each(e.dataTransfer.files, function(index, file){
fileList.push(file);
var fileReader = new FileReader();
fileReader.readAsDataURL(file);
fileReader.onload = (function(e){
var form = document.createElement('form');
form.action = 'uploads';
form.className = 'forms';
var img = document.createElement('img');
img.src = e.target.result;
img.width = 80;
var label = document.createElement('label');
$(label).append('Image Caption');
var input = document.createElement('input');
input.type = "text";
input.name = "title";
input.value = "";
var button = document.createElement('button');
$(button).append('Upload');
$(form).append(img);
$(form).append(input);
$(form).append(button);
$('#uploads').append(form);
});
});
e.preventDefault();
e.stopPropagation();
});
$('#upload-all').on('click', function(e){
//upload all images with captions
});
$(document).on('submit', 'form', function(e){
e.preventDefault();
//var index what does this do?
var index = $(this).index();
var formData = new FormData($(this)[0]);
formData.append('file', fileList[index]);
var xhr = new XMLHttpRequest();
xhr.open('post', 'upload.php', true);
xhr.send(formData);
});
});
Мой файл шаблона загрузки является
<div id="droparea" class="droparea">
Drop files here to upload
</div>
<div id="uploads">
</div>
<button id="upload-all">Upload All</button>
Мой upload.php
файл просто печатает массив $_FILES
и $_POST
Большое спасибо
Похоже, обработчик событий кнопки находится внутри обработчика события drag & drop, привязывая новый обработчик событий к каждой камере. Кроме того, 'fileList' содержит список файлов, но вы каким-то образом добавляете только один файл в formData на основе индекса кнопки, что кажется странным? – adeneo
О да, вы правы. В первый раз, когда я это сделал, я позиционировал объявление массива 'fileList' за пределами обработчика события drag & drop. Когда я переместил его внутри обработчика drag & drop, событие submit не могло обнаружить массив 'fileList', так что это плохое перемещение обработчика событий кнопки внутри drag & drop не наоборот. Я это исправил. Однако моя проблема остается, теперь я даже не знаю, как я отправил массив файлов. Я буду продолжать играть. – rex