最終課題 メルカリ

 今行なっている部分は商品出品ページの画像を複数生成することです

出品ページ.mov.gif

見本で 、このように表示するようにコードを書いています。

書いている部分はJavaScriptという言語に書いています。

実際のコードはこちらです。

$(document).on('turbolinks:load', ()=> {
var images = ;
$(function(){
$('form').on('change', 'input[type="file"]','#image' ,function(e) {
var file = e.target.files[0],
reader = new FileReader(),
$preview = $(".preview");
t = this;
if(file.type.indexOf("image") < 0){
return false;
}
reader.onload = (function(file) {
return function(e) {
$preview.append($('<img>').attr({
src: e.target.result,
width: "110px",
height: "110px",
class: "preview",
title: file.name
}));
};
})(file);
reader.readAsDataURL(file);
images.push('<img>');
var new_image = $(`<input multiple= "multiple" name="product_images[image]" type="file"
id="image" image =${images.length} style = display:none>`);
$(".image_box").prepend(new_image);
});
});
});


上から自分の言葉で説明します。
$(document).on('turbolinks:load', ()=>
{var images = [];
この部分はまず繰り返し行えるようにするターボリンクとimageの配列を記述してます。
このターボリンクがないと、いちいちリロードを押さないといけなくなります。                                         
$(function(){
$('form').on('change', 'input[type="file"]','#image' ,function(e) {
var file = e.target.files[0],
reader = new FileReader(),
$preview = $(".preview");
t = this;
if(file.type.indexOf("image") < 0){
return false;
}
reader.onload = (function(file) {
return function(e) {
$preview.append($('<img>').attr({
src: e.target.result,
width: "110px",
height: "110px",
class: "preview",
title: file.name
}));
};
})(file);
 
この部分はまず、functionでかっこの中の部分に何らかの行動をさせるようにします。
formという部分にtype,fileというファイルに変えるというイベントを発火させてます。
 
0番目のファイル(0番目は表示上1番目)にnew.filereeaderという新しいファイルを生成し、previewというクラスに新しい画像を表示させる記述です。
 
 ifの部分はあってもなくても今の段階は大丈夫です。
次のreader.on.loadは上で定義したreaderはnew.filereeaderを読み込んでいます。
 
return以下の部分も重要です。
preview.append(<'image'>)はimageを生成しそれをpreviewに表示させています。
src以下の記述は画像を表示させる詳細の記述です。