EDIT: After searching a lot of websites for an answer, I finally found !I found this site https://codepen.io/Anveio/pen/XzYBzX and I modified (a lot of) my code based on the code and now everything is working.
Apparently I needed to wrap my code around a Promise and Await to be able to return the content of the file.
I'm having a small problem with my code.The case is: I have a element and a button to browse for a file. When I click the button I can select an image (jpg or png) max size of 2mbs.The "strange" is this, when I click the button for the first time, nothing shows on the <img>
, but if a click the second time and choose the same image, the image appears. If I click again and choose another image, the same thing happens.
The question is: how can I resolve resolve this problem ?
$(".brw").on("click", function() { var dtid = $(this).attr("data-id"); var fileDialog = $('<input type="file" accept=".png, .jpg">'); fileDialog.click().on("change",function() { var oName = $(this)[0].files[0].name; var lastDot = oName.lastIndexOf('.'); var oExt = oName.substring(lastDot + 1); var oSize = Math.round($(this)[0].files[0].size / 1024); if(oName == undefined || oName == 0) return; if(oExt != "jpg" && oExt != "png") return; if(oSize > 2000) { $('#in'+dataId).show().delay(3000).fadeOut(300); // Show alert about image size larger than 2mbs return; } var reader = new FileReader(); reader.onload = function(event) { // Add image to the corresponding <img> element $('#'+ dtid).attr("src", event.target.result); // Get the size of the selected image, adjust the aspect ratio and then modify the size of the corresponding <img> element var newimg = new Image(); newimg.src = event.target.result; var xheight = newimg.height; var xwidth = newimg.width; var ratio = Math.min(1, 320 / xwidth, 300 / xheight); $('#'+dtid).css({width:xwidth * ratio, height:xheight * ratio}); // ----------------------------------- }; reader.onerror = function(event) { alert("I AM ERROR: " + event.target.error.code); }; reader.readAsDataURL($(this)[0].files[0]); console.log('Trigger : '+ dtid); console.log('Nome : '+ oName); console.log('Extensão : '+ oExt); console.log('Tamanho : '+ oSize); }); return false;});
The element.
<center><img src="imgs/n.png" width="350px" height="300px" style="border: 2px dashed red" id="i1" alt=""/></center><input type="button" value="Browse..." class="imgs brw" data-id="i1" />
Thank you
So, the code works, but only when I select the image for the second time.What I expect is to click the button for the first time and the image appears on element