Reputation: 1
I am trying to get an input type-file, append it to unordered list and make it show up in browser But it's not showing up and browser not showing any errors Please help. I am trying to solve this problem already 3 days. I recently started coding, please don't make fun of me This is my own project in order to learn better JavaScript
My html
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascripttutorial</title>
<style>
.name-div {
color: aliceblue;
}
.photo-div {
color: aliceblue;
}
.date-div {
color: aliceblue;
}
.box-1 {
border: 1px solid black;
padding: 10px;
display: flex;
flex-direction: column;
height: 500px;
width: 100px;
float: left;
}
.box-2 {
border: 1px solid black;
padding: 10px;
display: flex;
flex-direction: column;
height: 500px;
width: 200px;
float: left;
}
.box-3 {
border: 1px solid black;
padding: 10px;
display: flex;
flex-direction: column;
height: 500px;
width: 150px;
float: left;
}
body {
margin-left: 20px;
margin-right: 20px;
}</style> <script src="script.js"></script></head><body>
<div style="margin: 10px;" class="name-div">
<input id="input-name" type="text" placeholder="Your name">
</div>
<div style="margin: 10px;" class="photo-div">
<input id="input-photo" type="file" onchange="previewFile()"><br>
<img src="" height="100" alt="Image preview...">
</div>
<div style="margin: 10px;" class="date-div">
<input id="input-date" type="date" placeholder="Your birthday">
</div>
<div style="margin: 10px;" class="button-div">
<button id="button">Submit</button>
</div>
<span class="box-1">
<ul id="messages-1">Name: </ul>
</span>
<span class="box-2">
<ul id="messages-2">Photo: </ul>
</span>
<span class="box-3">
<ul id="messages-3">Date: </ul>
</span>
<script async src="script.js"></script></body></html>>
My script
window.onload=function(){
var inputName = document.getElementById('input-name');
var inputPhoto = document.getElementById('input-photo');
var inputDate = document.getElementById('input-date');
var button = document.getElementById('button');
var messages1 = document.getElementById('messages-1');
var messages2 = document.getElementById('messages-2');
var messages3 = document.getElementById('messages-3');
button.addEventListener("click", function(){
var newMessage1 = document.createElement("li");
var newMessage2 = document.createElement("li");
var photo = document.createElement("img");
var newMessage3 = document.createElement("li");
newMessage1.innerHTML = inputName.value;
photo.setAttribute("style", "height: 30px; widht: 30px;");
var reader1 = new FileReader();
reader1.addEventListener("onloadend", function(){
reader1.readAsDataURL(inputPhoto);
photo.src = reader1.result;
});
newMessage3.innerHTML = inputDate.value;
messages1.appendChild(newMessage1);
messages2.appendChild(newMessage2)
messages3.appendChild(newMessage3);
newMessage2.appendChild(photo);
inputName.value = "";
inputDate.value = "";
});
}
function previewFile() {
var preview = document.querySelector('img');
var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();
reader.onloadend = function () {
preview.src = reader.result;
}
if (file) {
reader.readAsDataURL(file);
} else {
preview.src = "";
}
}
Upvotes: 0
Views: 868
Reputation: 1047
Listen to the change
event fire by the image file upload input on an image upload.
FileReader
.inputPhoto.addEventListener("change", (e) => {
var file = e.target.files[0];
fileReader.readAsDataURL(file);
});
Now listen to the load
event fire by the FileReader.
src
attribute.fileReader.addEventListener("load", (e) => {
var imgUploadWrap = document.getElementsByClassName("photo-div")[0];
var img = document.createElement("img");
var base64 = e.target.result;
img.setAttribute("id", "uploaded-img");
img.height = 100;
img.src = base64;
imgUploadWrap.append(img);
});
Notes:
load
event, not loadend
, then you don't have to handle the file empty scenario because the load
event is fired only if the upload is successful.Finally when clicking the submit button, set the preview image element's src attribute to the image element inside the message.
if (uploadedImg) {
photo.height = 60;
photo.src = uploadedImg.src;
uploadedImg.remove();
}
Full Code - https://codesandbox.io/s/input-type-file-not-showing-up-even-with-filereader-71891729-u5bvft?file=/script.js
Upvotes: 1