Объект FileList из HTMLInputElement (который является основным объектом, который будет хранить файлы в вашем input.files ), может быть изменен только для полного его удаления (с помощью input.value = null
).
Теперь есть способы , чтобы фактически обойти это, введенные конструктором DataTransfer , но на сегодняшний день только Chrome и последний Firefox поддерживают этот конструктор .
Таким образом, самым легким в этом случае является не полагаться на пользовательский интерфейс по умолчанию и вместо этого переместить все ваши файлы в обычный массив, который вы сможете редактировать по своему усмотрению.
Вот один беспорядочный способ, но он может дать вам хорошую отправную точку: он добавляет массив на ваш вход, который будет хранить в памяти файлы.
// The multiUp function will be called each time our hidden input is changed
document.querySelector('input').addEventListener('change', multiUp, false);
function multiUp(e){
// if it's the first time we call it
if(!this.multiFiles){
// create the array that will keep our files in memory
this.multiFiles = [];
// add a pointer to the span where we'll display the file names
this.__fileHolder = document.querySelector('#fileHolder');
}
// each time : empty the fileHolder span
this.__fileHolder.innerHTML = '';
var i;
// add the new files to our array
for(i = 0; i0){
for(var i = 0; i
#add{ font-size: 2em; cursor: pointer;}
#fileHolder{ color: rgba(0,0,0,.7); max-width: 80%; font-size: 70%; overflow-x: auto; white-space: nowrap; display: inline-block;}
.deleteBtn{cursor: pointer; color: #000;}
+
No files selected.
Теперь вы можете получить доступ к этим файлам, итерации через document.querySelector('.multiUp>input').multiFiles
.