我有一个网站,用户可以在其中上传多个文件(仅图像)。我添加了一个功能,可以在预览中查看上载的文件。我从其他关于stackoverflow的帖子中获得了帮助。
function previewImages() {
var $preview = $('#preview').empty();
if (this.files) $.each(this.files, readAndPreview);
function readAndPreview(i, file) {
if (!/\.(jpe?g|png|gif)$/i.test(file.name)){
return alert(file.name +" is not an image");
}
var reader = new FileReader();
$(reader).on("load", function() {
$preview.append($("<img/>", {src:this.result, height:100}));
});
reader.readAsDataURL(file);
}
}
$('#file-input').on("change", previewImages);
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<label class="btn btn-outline-dark btn-sm">
<i class="mdi mdi-upload"></i>
<span class="position-relative" style="top: -2px;">Upload image</span>
<input type="file" style="display: none;" id="file-input" multiple>
</label>
<div id="preview" class="my-3"></div>
</div>
现在,我要为每个上载的图像创建一个功能,应该有一个“删除”按钮(在图像下方)。如果用户点击“删除”,则关联的图片将被删除,并且不再显示。 我目前不知道该怎么做。有人知道我的问题的答案吗?
我使用了libaray Dropzone,但是它有故障,所以我决定不再使用它。
答案 0 :(得分:1)
只需将img
标签包裹在父部分中,然后添加一个元素即可删除该图像。然后,向该元素添加一个点击侦听器,并轻松删除相应的图像,如下所示:
function previewImages() {
var $preview = $('#preview').empty();
if (this.files) $.each(this.files, readAndPreview);
function readAndPreview(i, file) {
if (!/\.(jpe?g|png|gif)$/i.test(file.name)) {
return alert(file.name + " is not an image");
}
var reader = new FileReader();
$(reader).on("load", function (e) {
$preview.append(`<span class="parent-span">
<img class="imageThumb" src="`+ e.target.result + `" title="` + file.name + `"/>
<br/><span class="remove">Remove image</span>
</span>`);
});
reader.readAsDataURL(file);
$(document).on("click", ".remove", function () {
$(this).parent(".parent-span").remove();
});
}
}
$('#file-input').on("change", previewImages);
.imageThumb {
height: 100px;
width: 100px;
cursor: pointer;
}
.parent-span {
display: inline-block;
margin: 10px 10px 0 0;
}
.remove {
background: #444;
border: 1px solid black;
border: 1px solid black;
color: white;
text-align: center;
cursor: pointer;
}
.remove:hover {
background: white;
color: black;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<label class="btn btn-outline-dark btn-sm">
<i class="mdi mdi-upload"></i>
<span class="position-relative" style="top: -2px;">Upload image</span>
<input type="file" style="display: none;" id="file-input" multiple>
</label>
<div id="preview" class="my-3"></div>
</div>