I have this DOM:
var id = 0;
$('input:file#upload')[0].files[ id ]
That get's the first file on the 0th index. File properties are listed and all works, but...
How do we remove items from the DOM's [object FileList]
with JavaScript?
I have this DOM:
var id = 0;
$('input:file#upload')[0].files[ id ]
That get's the first file on the 0th index. File properties are listed and all works, but...
How do we remove items from the DOM's [object FileList]
with JavaScript?
I' am afraid that you cannot delete objects from
FileList object
directly. Just assign$('input:file#upload')[0].files
to anArray
and then remove items from that array usingsplice
or method of your choice and then use thatArray
.Finally found a way! I knew before that
input.files
would accept a FileList but the only way to get it was throught a drag and drop event.But now i know how to construct a own FileList!
This works in chrome (and maybe some other)
This works in Firefox
The thing is you need to loop over each file in the input, add those you still want to keep and assign the file.files with the new list of files.
The most practical way to remove
FileList object
is to just remove the file input itself from the DOM and re-append it again. This will remove all the items from the file list.I know a lot of people will say this is not an elegant solution, but it very easy to implement, a better approach for most cases, and you can do what is important with the input file, validation!
By now you see that to control the
FileList object
is hard. If you really need to manipulate an individual file item, read Multi-File Uploads and Multiple Selects (Part 2), by RAYMOND CAMDEN . I prefer to just make the user select the files again (if he done goofy) and give him an error message of what went wrong. This will not make the user experience bad.As a reminder, be aware that input file brings security weakness (Vulnerability: Unrestricted File Upload).
Since this post didn't really answer the question, I know it won't get any points, but really consider the alternatives. For my case when I was implementing deleting a file object item, it didn't make sense continuing the upload after some file didn't pass the validation, even if some files were ok. In the end, the user would still have to open the input file and redo the process. So, for my case, this feature was just adding complexity, and it was not in the specification this much control for an input file.
Bellow an example with validation that deletes all the
FileList object
when fails:I hope this helps in some way.
I have found very quick & short workaround for this. Tested in many popular browsers (Chrome, Firefox, Safari);
First, you have to convert FileList to an Array
to delete the particular element use this
No, We can make it removable. I implemented this and it works definitely.
First you need to initialize this variables
Then write this code on file input's change
Then at last this 2 functions will help to do the rest
At last when you submit your form than take the files from the array