gpt4 book ai didi

javascript - 旧文件从 jQuery 文件上传控件中删除

转载 作者:行者123 更新时间:2023-11-29 16:33:26 26 4
gpt4 key购买 nike

假设我要上传一个文件,如代码片段所示,然后我再次从同一上传单击控件上传两个文件,在这种情况下,旧文件会从文件上传控件中释放出来,而新上传的文件会在悬停时显示上传控制

重现步骤:

1) 当我单击“选择附件”按钮选择一个文件时, View 如下图所示

enter image description here

2)现在,当我再次单击“选择附件”按钮选择两个图像时,旧图像/文件将被删除并显示新文件。请查看下面的屏幕截图

enter image description here

3)单击删除时,旧文件名仍保留在上传控件上(可以在悬停效果中看到)

我从 link 获取了代码

//I added event handler for the file upload control to access the files properties.
document.addEventListener("DOMContentLoaded", init, false);

//To save an array of attachments
var AttachmentArray = [];

//counter for attachment array
var arrCounter = 0;

//to make sure the error message for number of files will be shown only one time.
var filesCounterAlertStatus = false;

//un ordered list to keep attachments thumbnails
var ul = document.createElement('ul');
ul.className = ("thumb-Images");
ul.id = "imgList";

function init() {
//add javascript handlers for the file upload event
document.querySelector('#files').addEventListener('change', handleFileSelect, false);
}

//the handler for file upload event
function handleFileSelect(e) {
//to make sure the user select file/files
if (!e.target.files) return;

//To obtaine a File reference
var files = e.target.files;

// Loop through the FileList and then to render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {

//instantiate a FileReader object to read its contents into memory
var fileReader = new FileReader();

// Closure to capture the file information and apply validation.
fileReader.onload = (function (readerEvt) {
return function (e) {

//Apply the validation rules for attachments upload
ApplyFileValidationRules(readerEvt)

//Render attachments thumbnails.
RenderThumbnail(e, readerEvt);

//Fill the array of attachment
FillAttachmentArray(e, readerEvt)
};
})(f);

// Read in the image file as a data URL.
// readAsDataURL: The result property will contain the file/blob's data encoded as a data URL.
// More info about Data URI scheme https://en.wikipedia.org/wiki/Data_URI_scheme
fileReader.readAsDataURL(f);
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
}

//To remove attachment once user click on x button
jQuery(function ($) {
$('div').on('click', '.img-wrap .close', function () {
var id = $(this).closest('.img-wrap').find('img').data('id');

//to remove the deleted item from array
var elementPos = AttachmentArray.map(function (x) { return x.FileName; }).indexOf(id);
if (elementPos !== -1) {
AttachmentArray.splice(elementPos, 1);
}

//to remove image tag
$(this).parent().find('img').not().remove();

//to remove div tag that contain the image
$(this).parent().find('div').not().remove();

//to remove div tag that contain caption name
$(this).parent().parent().find('div').not().remove();

//to remove li tag
var lis = document.querySelectorAll('#imgList li');
for (var i = 0; li = lis[i]; i++) {
if (li.innerHTML == "") {
li.parentNode.removeChild(li);
}
}

});
}
)

//Apply the validation rules for attachments upload
function ApplyFileValidationRules(readerEvt)
{
//To check file type according to upload conditions
if (CheckFileType(readerEvt.type) == false) {
alert("The file (" + readerEvt.name + ") does not match the upload conditions, You can only upload jpg/png/gif files");
e.preventDefault();
return;
}

//To check file Size according to upload conditions
if (CheckFileSize(readerEvt.size) == false) {
alert("The file (" + readerEvt.name + ") does not match the upload conditions, The maximum file size for uploads should not exceed 300 KB");
e.preventDefault();
return;
}

//To check files count according to upload conditions
if (CheckFilesCount(AttachmentArray) == false) {
if (!filesCounterAlertStatus) {
filesCounterAlertStatus = true;
alert("You have added more than 10 files. According to upload conditions you can upload 10 files maximum");
}
e.preventDefault();
return;
}
}

//To check file type according to upload conditions
function CheckFileType(fileType) {
if (fileType == "image/jpeg") {
return true;
}
else if (fileType == "image/png") {
return true;
}
else if (fileType == "image/gif") {
return true;
}
else {
return false;
}
return true;
}

//To check file Size according to upload conditions
function CheckFileSize(fileSize) {
if (fileSize < 300000) {
return true;
}
else {
return false;
}
return true;
}

//To check files count according to upload conditions
function CheckFilesCount(AttachmentArray) {
//Since AttachmentArray.length return the next available index in the array,
//I have used the loop to get the real length
var len = 0;
for (var i = 0; i < AttachmentArray.length; i++) {
if (AttachmentArray[i] !== undefined) {
len++;
}
}
//To check the length does not exceed 10 files maximum
if (len > 9) {
return false;
}
else
{
return true;
}
}

//Render attachments thumbnails.
function RenderThumbnail(e, readerEvt)
{
var li = document.createElement('li');
ul.appendChild(li);
li.innerHTML = ['<div class="img-wrap"> <span class="close">&times;</span>' +
'<img class="thumb" style="display:none;" src="', e.target.result, '" title="', escape(readerEvt.name), '" data-id="',
readerEvt.name, '"/>' + '</div>'].join('');

var div = document.createElement('div');
div.className = "FileNameCaptionStyle";
li.appendChild(div);
div.innerHTML = [readerEvt.name].join('');
document.getElementById('Filelist').insertBefore(ul, null);
}

//Fill the array of attachment
function FillAttachmentArray(e, readerEvt)
{
AttachmentArray[arrCounter] =
{
AttachmentType: 1,
ObjectType: 1,
FileName: readerEvt.name,
FileDescription: "Attachment",
NoteText: "",
MimeType: readerEvt.type,
Content: e.target.result.split("base64,")[1],
FileSizeInBytes: readerEvt.size,
};
arrCounter = arrCounter + 1;
}
/*Copied from bootstrap to handle input file multiple*/

.btn {
display: inline-block;
padding: 6px 12px;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
line-height: 1.42857143;
text-align: center;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-image: none;
border: 1px solid transparent;
border-radius: 4px;
}

/*Also */

.btn-success {
border: 1px solid #c5dbec;
background: #D0E5F5;
font-weight: bold;
color: #2e6e9e;
}

/* This is copied from https://github.com/blueimp/jQuery-File-Upload/blob/master/css/jquery.fileupload.css */

.fileinput-button {
position: relative;
overflow: hidden;
}

.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
-ms-filter: 'alpha(opacity=0)';
font-size: 200px;
direction: ltr;
cursor: pointer;
}

.thumb {
height: 80px;
width: 100px;
border: 1px solid #000;
}

ul.thumb-Images li {
width: 120px;
float: left;
display: inline-block;
vertical-align: top;
height: 120px;
}

.img-wrap {
position: relative;
display: inline-block;
font-size: 0;
}

.img-wrap .close {
position: absolute;
top: 2px;
right: 2px;
z-index: 100;
background-color: #D0E5F5;
padding: 5px 2px 2px;
color: #000;
font-weight: bolder;
cursor: pointer;
opacity: .5;
font-size: 23px;
line-height: 10px;
border-radius: 50%;
}

.img-wrap:hover .close {
opacity: 1;
background-color: #ff0000;
}

.FileNameCaptionStyle {
font-size: 12px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<span class="btn btn-success fileinput-button">
<span>Select Attachment</span>
<input type="file" name="files[]" id="files" multiple accept="image/jpeg, image/png, image/gif,"><br />
</span>
<output id="Filelist"></output>

最佳答案

根据你的问题,你想操纵 files property of <input> elements with type="file" .

A FileList object that lists every selected file. This list has no more than one member unless the multiple attribute is specified.

因此,即使您在 <input type="file"/> 上执行事件,它也会返回 so它仅返回选定的元素。您可以获得选定的文件。获取选定的文件

在 jQuery 中

$("#files")[0].files

enter image description here

在纯js中

document.getElementById('files').files;

enter image description here

它返回所选元素的数组。 这些是您的上传文件按钮上显示的项目。

所以你可以做一些黑客事情例如你可以设置你自己的 title <input type="file"> 上的属性元素。浏览器不允许更改 FileList所以你需要使用技巧。这是一个示例片段。

var title = "";
$("#imgList>li").each(function(){
title += `${$(this).find(".FileNameCaptionStyle").text()}\n`;
});
$("#files").attr("title", title);

//I added event handler for the file upload control to access the files properties.
document.addEventListener("DOMContentLoaded", init, false);

//To save an array of attachments
var AttachmentArray = [];

//counter for attachment array
var arrCounter = 0;

//to make sure the error message for number of files will be shown only one time.
var filesCounterAlertStatus = false;

//un ordered list to keep attachments thumbnails
var ul = document.createElement('ul');
ul.className = ("thumb-Images");
ul.id = "imgList";

function init() {
//add javascript handlers for the file upload event
document.querySelector('#files').addEventListener('change', handleFileSelect, false);
}

//the handler for file upload event
function handleFileSelect(e) {
//to make sure the user select file/files
if (!e.target.files) return;

//To obtaine a File reference
var files = e.target.files;

// Loop through the FileList and then to render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {

//instantiate a FileReader object to read its contents into memory
var fileReader = new FileReader();

// Closure to capture the file information and apply validation.
fileReader.onload = (function(readerEvt) {
return function(e) {

//Apply the validation rules for attachments upload
ApplyFileValidationRules(readerEvt)

//Render attachments thumbnails.
RenderThumbnail(e, readerEvt);

//Fill the array of attachment
FillAttachmentArray(e, readerEvt)
};
})(f);

// Read in the image file as a data URL.
// readAsDataURL: The result property will contain the file/blob's data encoded as a data URL.
// More info about Data URI scheme https://en.wikipedia.org/wiki/Data_URI_scheme
fileReader.readAsDataURL(f);
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
}

//To remove attachment once user click on x button
jQuery(function($) {

$('#Filelist').on('click', '.img-wrap .close', function() {
var id = $(this).closest('.img-wrap').find('img').data('id');
//to remove the deleted item from array
var elementPos = AttachmentArray.map(function(x) {
return x.FileName;
}).indexOf(id);
if (elementPos !== -1) {
AttachmentArray.splice(elementPos, 1);
}

//to remove image tag
$(this).parent().find('img').not().remove();

//to remove div tag that contain the image
$(this).parent().find('div').not().remove();

//to remove div tag that contain caption name
$(this).parent().parent().find('div').not().remove();

//to remove li tag
var lis = document.querySelectorAll('#imgList li');
for (var i = 0; li = lis[i]; i++) {
if (li.innerHTML == "") {
li.parentNode.removeChild(li);
}
}
changeTitle();
});
});

//Apply the validation rules for attachments upload
function ApplyFileValidationRules(readerEvt) {
//To check file type according to upload conditions
if (CheckFileType(readerEvt.type) == false) {
alert("The file (" + readerEvt.name + ") does not match the upload conditions, You can only upload jpg/png/gif files");
e.preventDefault();
return;
}

//To check file Size according to upload conditions
if (CheckFileSize(readerEvt.size) == false) {
alert("The file (" + readerEvt.name + ") does not match the upload conditions, The maximum file size for uploads should not exceed 300 KB");
e.preventDefault();
return;
}

//To check files count according to upload conditions
if (CheckFilesCount(AttachmentArray) == false) {
if (!filesCounterAlertStatus) {
filesCounterAlertStatus = true;
alert("You have added more than 10 files. According to upload conditions you can upload 10 files maximum");
}
e.preventDefault();
return;
}
}

//To check file type according to upload conditions
function CheckFileType(fileType) {
if (fileType == "image/jpeg") {
return true;
} else if (fileType == "image/png") {
return true;
} else if (fileType == "image/gif") {
return true;
} else {
return false;
}
return true;
}

//To check file Size according to upload conditions
function CheckFileSize(fileSize) {
if (fileSize < 300000) {
return true;
} else {
return false;
}
return true;
}

//To check files count according to upload conditions
function CheckFilesCount(AttachmentArray) {
//Since AttachmentArray.length return the next available index in the array,
//I have used the loop to get the real length
var len = 0;
for (var i = 0; i < AttachmentArray.length; i++) {
if (AttachmentArray[i] !== undefined) {
len++;
}
}
//To check the length does not exceed 10 files maximum
if (len > 9) {
return false;
} else {
return true;
}
}

//Render attachments thumbnails.
function RenderThumbnail(e, readerEvt) {
var li = document.createElement('li');
ul.appendChild(li);
li.innerHTML = ['<div class="img-wrap"> <span class="close">&times;</span>' +
'<img class="thumb" style="display:none;" src="', e.target.result, '" title="', escape(readerEvt.name), '" data-id="',
readerEvt.name, '"/>' + '</div>'
].join('');

var div = document.createElement('div');
div.className = "FileNameCaptionStyle";
li.appendChild(div);
div.innerHTML = [readerEvt.name].join('');
document.getElementById('Filelist').insertBefore(ul, null);
changeTitle();
}

//Fill the array of attachment
function FillAttachmentArray(e, readerEvt) {
AttachmentArray[arrCounter] = {
AttachmentType: 1,
ObjectType: 1,
FileName: readerEvt.name,
FileDescription: "Attachment",
NoteText: "",
MimeType: readerEvt.type,
Content: e.target.result.split("base64,")[1],
FileSizeInBytes: readerEvt.size,
};
arrCounter = arrCounter + 1;
}

function changeTitle() {
var title = "";
$("#imgList>li").each(function() {
title += `${$(this).find(".FileNameCaptionStyle").text()}\n`;
});
$("#files").attr("title", title);
}
/*Copied from bootstrap to handle input file multiple*/
.btn {
display: inline - block;
padding: 6 px 12 px;
margin - bottom: 0;
font - size: 14 px;
font - weight: normal;
line - height: 1.42857143;
text - align: center;
white - space: nowrap;
vertical - align: middle;
cursor: pointer; -
webkit - user - select: none; -
moz - user - select: none; -
ms - user - select: none;
user - select: none;
background - image: none;
border: 1 px solid transparent;
border - radius: 4 px;
}

/*Also */

.btn - success {
border: 1 px solid# c5dbec;
background: #D0E5F5;
font - weight: bold;
color: #2e6e9e;
}

/* This is copied from https://github.com/blueimp/jQuery-File-Upload/blob/master/css/jquery.fileupload.css */

.fileinput-button {
position: relative;
overflow: hidden;
}

.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
-ms-filter: 'alpha(opacity= 0)
';
font - size: 200 px;
direction: ltr;
cursor: pointer;
}

.thumb {
height: 80 px;
width: 100 px;
border: 1 px solid #000;
}

ul.thumb-Images li {
width: 120px;
float: left;
display: inline-block;
vertical-align: top;
height: 120px;
}

.img-wrap {
position: relative;
display: inline-block;
font-size: 0;
}

.img-wrap .close {
position: absolute;
top: 2px;
right: 2px;
z-index: 100;
background-color: # D0E5F5;
padding: 5 px 2 px 2 px;
color: #000;
font-weight: bolder;
cursor: pointer;
opacity: .5;
font-size: 23px;
line-height: 10px;
border-radius: 50%;
}

.img-wrap:hover .close {
opacity: 1;
background-color: # ff0000;
}

.FileNameCaptionStyle {
font - size: 12 px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<span class="btn btn-success fileinput-button">
<span>Select Attachment</span>
<input type="file" name="files[]" id="files" multiple accept="image/jpeg, image/png, image/gif,"><br />
</span>
<output id="Filelist"></output>

关于javascript - 旧文件从 jQuery 文件上传控件中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724701/

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