从预览中选择的文件中删除文件

Remove file from choosen files in preview

我有一个网站,用户可以在其中上传多个文件(仅限图像)。我添加了一个功能,可以在预览中看到上传的文件。我在 Whosebug 上得到了另一个 post 的帮助。

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,但它有问题,所以我决定不再使用它。

只需用父部分包裹您的 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>