如何在使用 jQuery 上传文件之前从文件上传控件中删除文件
how to remove a file from file upload control before uploading it using jQuery
我正在使用多文件上传控件上传文件。
我在上传之前列出文件,以便用户可以看到他们上传的文件的名称。
我在每个文件名行中都有一个删除按钮。
单击删除按钮时,我试图从列表中删除文件,以防万一我在上传之前更改了我的文件。
我 运行 对
没有想法
var fileInput = document.getElementById('inputfile');
var fileListDisplay = document.getElementById('allfiles');
var fileList = [];
var renderFileList, sendFile;
fileInput.addEventListener('change', function (evnt) {
fileList = [];
for (var i = 0; i < fileInput.files.length; i++) {
fileList.push(fileInput.files[i]);
}
renderFileList();
});
renderFileList = function () {
fileListDisplay.innerHTML = '';
fileList.forEach(function (file, index) {
var fileDisplayEl = document.createElement('p');
fileDisplayEl.innerHTML = file.name +"<div class=deletfile></div>";
fileListDisplay.appendChild(fileDisplayEl);
});
};
$(document).on('click','.deletfile', function()
{
var filen=($(this).parent().text());
console.log(fileList);
const index = fileList.indexOf(filen);
console.log(index,filen);
if (index > -1) {
fileList.splice(index,1);
}
//console.log(fileList);
});
<input id="inputfile" type="file" multiple> <br><div id='allfiles'></div>
怎么做?
这是我的代码
删除文件功能是我正在尝试的地方。
从你的代码中,我可以看出你忘记删除 dom 文件仍然存在的原因。
另外,为了简化代码,我们可以在删除按钮中附加data-index
,以便在我们删除时记住文件索引,这比比较文件名字符串更容易。
这是修改后的代码。
var fileInput = document.getElementById('inputfile');
var fileListDisplay = document.getElementById('allfiles');
var fileList = [];
var renderFileList, sendFile;
fileInput.addEventListener('change', function (evnt) {
fileList = [];
for (var i = 0; i < fileInput.files.length; i++) {
fileList.push(fileInput.files[i]);
}
renderFileList();
});
renderFileList = function () {
fileListDisplay.innerHTML = '';
fileList.forEach(function (file, index) {
var fileDisplayEl = document.createElement('p');
fileDisplayEl.innerHTML = `${file.name} <button data-index="${index}" class='deletfile'>X</button>`;
fileListDisplay.appendChild(fileDisplayEl);
});
};
$(document).on('click','.deletfile', function()
{
const index= $(this).attr('data-index');
fileList.splice(parseInt(index, 10), 1);
$(this).parent().remove();
});
我正在使用多文件上传控件上传文件。 我在上传之前列出文件,以便用户可以看到他们上传的文件的名称。 我在每个文件名行中都有一个删除按钮。 单击删除按钮时,我试图从列表中删除文件,以防万一我在上传之前更改了我的文件。 我 运行 对
没有想法
var fileInput = document.getElementById('inputfile');
var fileListDisplay = document.getElementById('allfiles');
var fileList = [];
var renderFileList, sendFile;
fileInput.addEventListener('change', function (evnt) {
fileList = [];
for (var i = 0; i < fileInput.files.length; i++) {
fileList.push(fileInput.files[i]);
}
renderFileList();
});
renderFileList = function () {
fileListDisplay.innerHTML = '';
fileList.forEach(function (file, index) {
var fileDisplayEl = document.createElement('p');
fileDisplayEl.innerHTML = file.name +"<div class=deletfile></div>";
fileListDisplay.appendChild(fileDisplayEl);
});
};
$(document).on('click','.deletfile', function()
{
var filen=($(this).parent().text());
console.log(fileList);
const index = fileList.indexOf(filen);
console.log(index,filen);
if (index > -1) {
fileList.splice(index,1);
}
//console.log(fileList);
});
<input id="inputfile" type="file" multiple> <br><div id='allfiles'></div>
怎么做?
这是我的代码
删除文件功能是我正在尝试的地方。
从你的代码中,我可以看出你忘记删除 dom 文件仍然存在的原因。
另外,为了简化代码,我们可以在删除按钮中附加data-index
,以便在我们删除时记住文件索引,这比比较文件名字符串更容易。
这是修改后的代码。
var fileInput = document.getElementById('inputfile');
var fileListDisplay = document.getElementById('allfiles');
var fileList = [];
var renderFileList, sendFile;
fileInput.addEventListener('change', function (evnt) {
fileList = [];
for (var i = 0; i < fileInput.files.length; i++) {
fileList.push(fileInput.files[i]);
}
renderFileList();
});
renderFileList = function () {
fileListDisplay.innerHTML = '';
fileList.forEach(function (file, index) {
var fileDisplayEl = document.createElement('p');
fileDisplayEl.innerHTML = `${file.name} <button data-index="${index}" class='deletfile'>X</button>`;
fileListDisplay.appendChild(fileDisplayEl);
});
};
$(document).on('click','.deletfile', function()
{
const index= $(this).attr('data-index');
fileList.splice(parseInt(index, 10), 1);
$(this).parent().remove();
});