动态创建输入字段

时间:2020-04-17 18:41:11

标签: javascript jquery frontend

我已经动态创建了输入字段。选择文件后,我要预览每个图像。但是我只能预览第一个。运行下面的代码片段以了解我。 如果有人可以帮助我,我会很高兴。

 $(document).ready(function () {
 $("#imageBrowes").change(function () {
var File = this.files;
if (File && File[0]) {
  ReadImage(File[0]);
 }
})
})
var ReadImage = function (file) {
var reader = new FileReader;
var image = new Image;
reader.readAsDataURL(file);
reader.onload = function (_file) {
image.src = _file.target.result;
image.onload = function () {
 var height = this.height;
 var width = this.width;
 var type = file.type;
 var size = ~~(file.size / 1024) + "KB";
 $("#targetImg").attr('src', _file.target.result);
 $("#description").text("Size:" + size + ", " + height + "X " + width + ", " + type + "");
$("#imgPreview").show();
 var html = '';
 html += '<div class="col-md-6"> <div class="btn "> <input type="file" name="Photo" id="imageBrowes" class="inputfile" multiple /> </div> <div id="imgPreview" class="thumbnail" style="display:none"> <img class="img-responsive img-fluid" id="targetImg" /> <div class="caption"> <a href="#" id="Clearphoto"><i class="fas fa-trash-alt"></i></a> <span id="description"></span> </div> </div> </div>';
$('#newRow').append(html);
 }
 }
}

    
<div id="newRow">
<div class="col-md-6">
<div class="btn ">
<input type="file" name="Photo" id="imageBrowes" class="inputfile" multiple />
  </div>
 <div id="imgPreview" class="thumbnail" style="display:none">
 <img class="img-responsive img-fluid" id="targetImg" />
 <div class="caption">
 <a href="#" id="Clearphoto"><i class="fas fa-trash-alt"></i></a>
<span id="description"></span>
   </div>
   </div>
</div>
  </div>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

1 个答案:

答案 0 :(得分:2)

您如何看待该解决方案?

$(document).ready(function() {
  attachFileChangeHandler()
})

function attachFileChangeHandler() {
  $(".imageBrowse").change(function() {
    var File = this.files;

    if (File && File[0]) {
      ReadImage($(this).parent().parent(), File[0]);
    }
  })
}

function createNewFileInput() {
  var html = '';
  html += `
  <div class="col-md-6">
   <div class="btn">
    <input type="file" name="Photo" class="inputfile imageBrowse" multiple />
   </div>
   <div class="thumbnail imgPreview" style="display:none">
   <img class="img-responsive img-fluid targetImg"/> <div class="caption">
   <a href="#" id="Clearphoto">
   <i class="fas fa-trash-alt"></i></a>
    <span class="description"></span>
    </div>
    </div>
  </div>`;
  $('#newRow').append(html);

  setTimeout(attachFileChangeHandler, 100)
}

var ReadImage = function(parent, file) {
  var reader = new FileReader;
  var image = new Image;

  reader.readAsDataURL(file);

  reader.onload = function(event) {
    var data = event.target.result;
    image.src = data;

    image.onload = function() {
      var height = this.height;
      var width = this.width;
      var type = file.type;
      var size = ~~(file.size / 1024) + "KB";
      parent.find(".targetImg").attr('src', data);
      parent.find(".description").text("Size:" + size + ", " + height + "X " + width + ", " + type + "");
      parent.find(".imgPreview").show();

      createNewFileInput();
    }
  }
}
<div id="newRow">
  <div class="col-md-6">
    <div class="btn ">
      <input type="file" name="Photo" class="inputfile imageBrowse" multiple />
    </div>
    <div class="thumbnail imgPreview" style="display:none">
      <img class="img-responsive img-fluid targetImg" />
      <div class="caption">
        <a href="#" id="Clearphoto">
          <i class="fas fa-trash-alt"></i>
        </a>
        <span class="description"></span>
      </div>
    </div>
  </div>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>