input[type=”file”]で画像アップロードするときに、jQueryで選択された画像をプレビューで表示するやり方です。画像選択画面で「キャンセル」を押された場合にも、添付されているか確認してプレビューのオンオフ処理する方法。
また、ファイル選択必須・ファイルサイズのバリデーションも紹介します。
もくじ
jQuery関連記事
【jQuery】pdfが存在するか、mimeタイプのバリデーションする
jQuery UIのsortableを使ってリストをドラッグで並び替える
jQueryのモーダルウィンドウを使ってフォームの確認画面を実装する
HTMLのcanvasタグとJavaScriptで円グラフの画像をつくる
bxSliderをカルーセルやコンテンツスライダーなど便利なサンプル5種
bxSliderの使い方と、オプションでのカスタマイズ方法
select・optionタグをjQueryで、プルダウンの選択値を取得、変更する
jQueryでinput[type="file"]で画像アップロード時にプレビューを表示する
jQueryでrequiredの専用エラー文と文字数制限のバリデーションをつくる
画像を送信するフォームをHTMLでつくる
HTML
<form method="post" action="" enctype="multipart/form-data"> <input type="file" name="edit_image" id="edit_image" class="img_upload"> <img src="" id="tl_img" class="img_preview"> <input type="submit" value="投稿する"> </form>
フォームから画像などのファイルを扱う場合は、enctype="multipart/form-data"
が必要なので付けます。id="tl_img"
のimgタグがプレビューする要素です。
画像を選択されたらプレビュー表示
JavaScript
$('#edit_image').on('change', function (e) { var reader = new FileReader(); reader.onload = function (e) { $("#tl_img").attr('src', e.target.result); } reader.readAsDataURL(e.target.files[0]); });
これだけで、#edit_image
のinput type=”file”が変更されたらimgタグにプレビューを作成できます。
キャンセルボタンが押されたらプレビューを削除
JavaScript
$('#edit_image').on('change', function (e) { var fileset = $(this).val(); if (fileset === '') { $("#tl_img").attr('src', ""); } else { var reader = new FileReader(); reader.onload = function (e) { $("#tl_img").attr('src', e.target.result); } reader.readAsDataURL(e.target.files[0]); } });
前のパターンでは、キャンセルボタンが押されたときに、添付ファイルがないため、エラーが出てしまうので、
その対策をしたものです。#edit_image
のvalueを調べることで、ファイル名が取得できた場合はプレビューを作成します。
空白だった場合は、処理をせずにimgタグのプレビューを削除します。
同一ページ内で複数のプレビューを利用する
JavaScript
$('.img_upload').on('change', function (e) { var fileset = $(this).val(); var place = $(this).next("img.img_preview"); if (fileset === '') { place.attr('src', ""); } else { var reader = new FileReader(); reader.onload = function (e) { place.attr('src', e.target.result); } reader.readAsDataURL(e.target.files[0]); } });
同一ページ内で、複数プレビュー機能を使いたい時ってありますよね?
そのたびにJavaScriptでid指定なんかしてらんないので、input type=”file”が複数あっても問題ないように変更したものを紹介します。
変数を$(this)
で指定することで、その次のimgタグにプレビューを表示することができます。
HTML構造が変わらない場合だけになってしまいますが、十分使えると思います。
ファイルサイズのバリデーション
JavaScript
function file_size_check(idname) { var fileset = $('#' + idname).prop('files')[0]; if (fileset) { if (fileset.size >= 10485760) { var label = $('#' + idname).data('label'); $('#errorbox').append(label + "の添付ファイルが10MBを超えています。<br>"); } } }
確認ボタンを押した時に処理するバリデーションです。
選択必須なファイルサイズのバリデーション
JavaScript
function file_check(idname, category, preview) { var fileset = $('#' + idname).prop('files')[0]; if (!fileset) { $('#errorbox').append(category + "を選択してください。<br>"); } else { if (fileset.size >= 10485760) { $('#errorbox').append("添付ファイルが10MBを超えています。<br>"); } } }
確認ボタンを押した時に処理するバリデーションです。
選択されているかを確認し、次にファイルサイズを確認しています
コメント