目次
はじめに
以前、javascriptだけでファイルのアップロード前に画像を確認する方法について記事を書きました。
コメントで言われて気がついたのですが、multiple
プロパティを設定した場合の記事を書いて無かったなと。
というわけで早速作ってみました。
導入
HTML
<input type="file" onChange="loop(event, 'item1')" multiple> <div id="preview-item1"></div>
<input type="file">
に onChange
イベントで loop
関数を設定しています。
loop
の引数は、第一引数に event
を 第二引数にID(今回はitem1)を持たせています。
第二引数のIDは、<div>
のid(今回はpreview-item1) と紐付いていいます。
Javascript
var cnt = 0; // アップロードカウント var tmpId = 'tmp-' + cnt; // 一時保存用のID //アップロードファイルの数だけプレビュー関数をループさせる function loop(event, id){ for (let file of event.target.files) { imgPreView(file, id); } // 一時保存用のIDを更新 tmpId = 'tmp-' + ++cnt; } //アップロードファイルのプレビューを表示 function imgPreView(file, id){ let preview = document.getElementById("preview-"+ id); let previewImages = document.getElementsByClassName(tmpId); let reader = new FileReader(); if(previewImages != null) { for(let img of previewImages){ preview.removeChild(img); } } reader.onload = function(event) { var img = document.createElement("img"); img.setAttribute("src", reader.result); img.setAttribute("id", "previewImage-" + id); img.setAttribute("class", tmpId); preview.appendChild(img); }; reader.readAsDataURL(file); }
関数の説明です。
loop
関数にて、選択されたファイルの数だけ imgPreView
関数を回します。
ループ完了後に tmpId
を更新します。
imgPreView
関数にて、ファイルのプレビューを表示します。
すでに表示済みにプレビューは tmpId
を元に削除します。
サンプル
See the Pen file preview multiple by カバの樹 (@kabanoki) on CodePen.0
最後に
言われるまでこの機能についてまったく頭に無かったですねー。
そして、後でjQuery使ってる版も作らなければ・・・
今日はこの辺でー