gpt4 book ai didi

javascript - 根据主输入类型="file"(多个)元素创建多个输入类型="file"元素及其对应的值(FileList)

转载 作者:行者123 更新时间:2023-11-30 09:27:55 24 4
gpt4 key购买 nike

我有这段代码,我可以循环访问多个输入文件类型中的文件

$(function(){

$('#main-input').change(function(){
var files = $('#main-input')[0].files;
for (var i = 0, f; f = files[i]; i++) {

alert(files[i].name);

}
});

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="main-input" multiple>

我想要实现的是克隆主输入(#main-input)并根据循环文件给出一个值(文件)。有什么想法、建议吗?或者这可能吗?

最佳答案

是的,这个要求是可能的。您需要创建一个新的 FileList对于每个 File对象,然后设置 .files <input type="file">的属性(property)元素到FileList填充有 File对象。

下面的代码在 Chromium 62+ 和 Firefox 57+ 上返回相同的结果,请参阅 @Kaiido 的评论以获取评估 SafariEdge .

// FileList.js
class FileList {
constructor(...items) {
// flatten rest parameter
items = [].concat(...items);
// check if every element of array is an instance of `File`
if (items.length && !items.every(file => file instanceof File)) {
throw new TypeError("expected argument to FileList is File or array of File objects");
}
// use `ClipboardEvent("").clipboardData` for Firefox, which returns `null` at Chromium
// we just need the `DataTransfer` instance referenced by `.clipboardData`
const dt = new ClipboardEvent("").clipboardData || new DataTransfer();
// add `File` objects to `DataTransfer` `.items`
for (let file of items) {
dt.items.add(file)
}
return dt.files;
}
}

document.querySelector("input[type=file]")
.onchange = e => {
for (let file of e.target.files) {
const input = document.createElement("input");
input.type = "file";
input.files = new FileList(file);
document.body.appendChild(input);
}
}
<input type="file" multiple>

// FileList.js
function _FileList(items) {
// flatten rest parameter
items = [].concat.apply([], [items]);
// check if every element of array is an instance of `File`
if (items.length
&& !items.every(function(file) {
return file instanceof File})) {
throw new TypeError("expected argument to FileList is File or array of File objects");
}
// use `ClipboardEvent("").clipboardData` for Firefox, which returns `null` at Chromium
// we just need the `DataTransfer` instance referenced by `.clipboardData`
var dt = new ClipboardEvent("").clipboardData || new DataTransfer();
// add `File` objects to `DataTransfer` `.items`
for (var i = 0; i < items.length; i++) {
dt.items.add(items[i])
}
return dt.files;
}

document.querySelector("input[type=file]")
.onchange = function(e) {
for (var i = 0; i < e.target.files.length; i++) {
var input = document.createElement("input");
input.type = "file";
input.files = new _FileList(e.target.files[i]);
document.body.appendChild(input);
}
}
<input type="file" multiple>

关于javascript - 根据主输入类型="file"(多个)元素创建多个输入类型="file"元素及其对应的值(FileList),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com