javascript - 如何通过图像预览多次显示文件输入按钮?

标签 javascript php jquery

我正在使用 laravel 5.6,我的表单中有图像上传按钮。目前它使用上传单个文件和图像缩略图预览。

<h3>Upload  images</h3>
<input type="file" id="files" name="files[]" multiple />

jquery

<script >
    $(document).ready(function() {
        if (window.File && window.FileList && window.FileReader) {
            $("#files").on("change", function(e) {
                var files = e.target.files,
                filesLength = files.length;
                for (var i = 0; i < filesLength; i++) {
                    var f = files[i]
                    var fileReader = new FileReader();
                    fileReader.onload = (function(e) {
                        var file = e.target;
                        $("<span class=\"pip\">" +
                          "<img class=\"imageThumb\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" +
                          "<br/><span class=\"remove\">Remove image</span>" +
                          "</span>").insertAfter("#files");
                        $(".remove").click(function() {
                            $(this).parent(".pip").remove();
                        });
                    });
                    fileReader.readAsDataURL(f);
                }
            });
        } else {
            alert("Your browser doesn't support to File API")
        }
    });
</script>

CSS

input[type="file"] {
  display: block;
}
.imageThumb {
  max-height: 75px;
  border: 2px solid;
  padding: 1px;
  cursor: pointer;
}
.pip {
  display: inline-block;
  margin: 10px 10px 0 0;
}
.remove {
  display: block;
  background: #444;
  border: 1px solid black;
  color: white;
  text-align: center;
  cursor: pointer;
}
.remove:hover {
  background: white;
  color: black;
}

现在我向相同的表单添加另一个上传输入,如下所示,

<div class="form-group row required">
    <div class="field" align="left" >
        <h3>Upload  images</h3>
        <input type="file" id="files" name="files[]" multiple />
        <input type="file" id="files" name="files[]" multiple />//new one
    </div>
</div>

然后第一个上传按钮可以出现图像缩略图,但第二个文件输入没有显示缩略图。问题是什么?如何解决这个问题?

最佳答案

不要为两个按钮指定相同的 id(您提供的任何 id 都必须是唯一的),而是为它们指定相同的 class,以便您可以在 Javascript 中引用。

<div class="form-group row required">
    <div class="field" align="left" >
        <h3>Upload  images</h3>
        <input type="file" class="files" name="files[]" multiple />
        <input type="file" class="files" name="files[]" multiple />//new one
    </div>
</div>

然后您的 Javascript 需要更新以根据类而不是 id 绑定(bind)监听器。 .insertAfter() 也会更新以引用单击的特定项目。

$(document).ready(function() {
  if (window.File && window.FileList && window.FileReader) {
    $(".files").on("change", function(e) {  // THIS LINE CHANGED
        var clickedButton = this;  // THIS LINE IS NEW
        var files = e.target.files,
        filesLength = files.length;

        for (var i = 0; i < filesLength; i++) {
          var f = files[i]
          var fileReader = new FileReader();

          fileReader.onload = (function(e) {
            var file = e.target;
            $("<span class=\"pip\">" +
            "<img class=\"imageThumb\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" +
            "<br/><span class=\"remove\">Remove image</span>" +
            "</span>").insertAfter(clickedButton);  // THIS LINE CHANGED

            $(".remove").click(function(){
              $(this).parent(".pip").remove();
            });
          });

          fileReader.readAsDataURL(f);
        }
    });
  } else {
    alert("Your browser doesn't support to File API")
  }
});

DEMO

关于javascript - 如何通过图像预览多次显示文件输入按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52205079/

相关文章:

javascript - 如何从子模块访问父方法?

php - CodeIgniter "The page you requested was not found."错误?

javascript - 自制的Jquery灯箱,但z-index之后不会变回来

javascript - 如何在 jQuery 中检查视网膜显示并相应地提供双分辨率图像?

JavaScript - 仅重复 javascript 代码

javascript - 如果没有 iphone 和 ipad,如何知道任何 javascript/jquery 效果/插件都可以在这些设备上工作?

javascript - 显示基于 Javascript Cookie 的内容

javascript - AJAX 帖子上的异常行为

php - 如何在 PHP 4 中使用 SOAP/WSDL?

javascript - 刷新动态 jquery 多选菜单不起作用