JSFiddle - React, Tailwind, and code Playground
HTML
<div class="discount-form-file__wrapper">
<div class="discount-form-file-icon__wrapper"><img src="images/icon-file.png"></div>
<div class="discount-form-title__wrapper" id="upload_holder">Прикрепите файл</div>
<label for="file-upload"><div class="discount-form-button__wrapper">Выбрать файл</div></label>
<input type="file" class="discount-form-file" name="file-discount[]" id="file-upload" multiple>
</div>
JavaScript
const Store = {
files: []
}
let count_items = 0;
let new_item = 0;
function getFilesFormData(files) {
const formData = new FormData();
files.map((file, index) => {
formData.append(`file${index + 1}`, file);
});
return formData;
}
$('#file-upload').on('change',function(e){
if (!e.target.files.length) {
return;
}
const files = Object.keys(e.target.files).map((i) => e.target.files[i]);
addFiles(files);
const newForm = getFilesFormData(Store.files);
console.log(Store.files);
console.log(newForm);
e.target.value = '';
});
function addFiles(files) {
Store.files = Store.files.concat(files);
for(let i = count_items; i < Store.files.length; i++){
$('#uploaded-files').append(`
<div class="discount-form-upload__wrapper" style="display: none;" data-index="`+ i +`">
<div class="discount-form-file-icon__wrapper"><img src="images/icon-file.png"></div>
<div class="discount-form-uploaded__wrapper">` + Store.files[i].name + `</div>
<div class="discount-form-uploaded__close" onclick="deleteItem(`+ i +`)">
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.3936 1.54883L0.999927 13.9425" stroke="#28292D" stroke-width="2"/>
<path d="M13.3936 13.9434L0.999927 1.54973" stroke="#28292D" stroke-width="2"/>
</svg>
</div>
</div>`);
$('#uploaded-files').find('.discount-form-upload__wrapper').slideDown('600');
count_items++;
new_item++;
}
}
function deleteItem(index){
Store.files.splice(index, 1);
$('#uploaded-files .discount-form-upload__wrapper[data-index='+ index +']').slideUp("600", function() { $(this).remove(); } );
count_items--;
}