How can I avoid <input file> deletes values

2019-03-04 19:37发布

I'm working on a web uploader, however, I found something, I do not know if it's a problem. This is what I found:

When I choose files with <input type="file" multiple>, the values ​​of all selected files are stored in a list of files which is within the INPUT. However, when I add more files, the files that I select replace those I selected previously. I think this is a default behavior of this element DOM.

What do I have to do if I want to add more files without deleting my chosen before?

Does anyone know how to do this?

Btw: Sorry for my bad english, It's not my mother language.Thanks.

2条回答
萌系小妹纸
2楼-- · 2019-03-04 20:05

You can keep track of all FileLists, and loop over each one when sending through ajax: http://jsfiddle.net/46Pk8/. However, keep in mind that you can select (and upload) a file more than once this way. A better method would be to have a visual list, and let the user be able to add/remove files to/from the list.

var files = [];  // this will contain FileLists

$("button:first").on("click", function(e) {
    $("<input>").prop({
        "type": "file",
        "multiple": true
    }).on("change", function(e) {
        files.push(this.files);
    }).trigger("click");
});

$("button:last").on("click", function(e) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "/echo/html/", true);
    var data = new FormData();
    $.each(files, function() {  // each FileList
        $.each(this, function() {  // each file inside this list
            console.log("appending %s", this.name);
            data.append("files", this);
        });
    });
    xhr.onreadystatechange = function(e) {
        if(xhr.readyState === 4) {
            console.log("done");
        }
    };
    xhr.send(data);
});
查看更多
放我归山
3楼-- · 2019-03-04 20:11

As workaround you can insert another input after file choose and hide original one.

查看更多
登录 后发表回答