Проблема в том, что событие click
в элементе .file-upload
всплывает до .upload-button
и перехватывается обработчиком click
, который запускает обработчик щелчка на .file-upload
, который всплывает до .upload-button
который запускает щелчок ... и т. д.
Чтобы исправить это, остановите всплывающее событие из .file-upload
, добавив к нему обработчик события click
и вызвав stopPropagation()
в event
, вот так:
$(document).ready(function() {
var readURL = function(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$('.profile-image').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$(".file-upload").on('change click', function(e) {
e.stopPropagation();
readURL(this);
});
$(".upload-button").on('click', function() {
$(".file-upload").click();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<img class="profile-image" src="demo.png" alt="Profile Image">
<a class="profile-img-edit upload-button">
<i class="fas fa-camera"></i> Select Image
<input class="file-upload" type="file" name="file" size="40" accept=".png, .jpg, .jpeg, .gif">
</a>
</div>