0

I have created input fields dynamically. After choosing file, I want to preview each image. But I can preview only first one. Run the code snippet below to understand me. I would be glad if someone can help me.

 $(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 Answer 1

2

What do you think of that solution?

$(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>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.