javascript - JQuery 从列表中删除选定的文件
问题描述
我有多个文件输入并且我正在返回所选项目的名称,我想在我的列表中添加删除选项,例如当用户选择 2 个文件时,可以在上传文件之前删除其中的任何一个。
Code
<!-- HTML -->
<input type="file" name="file" placeholder="Choose File" id="file" multiple>
<!-- showing selected files names -->
<div class="row">
<div class="col-md-12 filenames"></div>
</div>
<!-- SCRIPT -->
$(document).ready(function (e) {
document.getElementById('file').onchange = function () {
var row = 0;
if (this.files.length > 0) {
// THE TOTAL FILE COUNT.
$('.filenames').append('Total Selected Files: <b>' + this.files.length + '</b></br >');
// RUN A LOOP TO CHECK EACH SELECTED FILE.
for (var i = 0; i <= this.files.length - 1; i++) {
var fname = this.files.item(i).name; // THE NAME OF THE FILE.
var fsize = this.files.item(i).size; // THE SIZE OF THE FILE.
// SHOW THE EXTRACTED DETAILS OF THE FILE.
$('.filenames').append(++row + "- " + fname + ' (<b>' + fsize + '</b> bytes) <hr/>');
}
}
};
});
Current result
有什么建议么?
解决方案
似乎 File API 没有提供从 FileList 中删除文件的方法,但您可以从 FileList 对象创建一个常规数组,然后使用该splice
方法并按索引删除文件。
let files = []
$("#file").on('change', function() {
files = [...files, ...this.files]
renderFiles(files)
})
$("#submit").on('click', function() {
console.log(files)
})
function renderFiles(files) {
let row = 0;
$('.filenames').html('')
if (files.length) {
$('.filenames').append(`Total Selected Files: <b>${files.length}</b></br >`);
files.forEach(({ name, size }, index) => {
const fileEl = $('<div class="file-item">')
const text = $('<span>', {
html: `${++row}- ${name} (<b>${size}</b> bytes)`
})
const btn = $('<button>', {
text: 'X'
})
btn.on('click', function() {
files.splice(index, 1)
renderFiles(files)
})
fileEl.append(text)
fileEl.append(btn)
$('.filenames').append(fileEl);
$('.filenames').append('<hr />')
})
}
}
.file-item {
display: flex;
align-items: center;
justify-content: space-between;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- HTML -->
<input type="file" name="file" placeholder="Choose File" id="file" multiple>
<!-- showing selected files names -->
<div class="row">
<div class="col-md-12 filenames"></div>
</div>
<div class="row">
<button id="submit">Submit</button>
</div>
推荐阅读
- java - 将字符映射到国际键集的键码
- .net - AWS Lambda 上带有 netcoreapp2.0 的 Npgsql 无法连接(有超时) - 我该如何解决?
- php - PHP 的可变长度参数 `...` 标记应该被称为什么?
- java - Dialgfow V2:使用java生成访问令牌
- svn - VisualSVN 服务器:是否可以不继承权限?
- python - Python - 重新索引每月值
- python - Enthought Canopy 不同步 Python 脚本
- macros - 使用自定义联系人字段的 Kentico 电子邮件小部件
- java - 如何使用 java.security 验证 xmldsig 签名
- r - 带有插入符号计算问题的 R 并行处理