質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

531閲覧

bootstrapのカスタムフォームについて

arinc0

総合スコア31

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2020/06/03 11:12

現在下記サイトの一番下にあるプレビュー付きのカスタム選択のコードを読んでいるのですが、
わからないところがある為質問させてください。
https://cccabinet.jpn.org/bootstrap4/javascript/forms/file-browser

javascriptのコードのところで、

$('.custom-file-input').on('change', handleFileSelect); function handleFileSelect(evt) { $('#preview').remove();// 繰り返し実行時の処理 $(this).parents('.input-group').after('<div id="preview"></div>'); var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { if (theFile.type.match('image.*')) { var $html = ['<div class="d-inline-block mr-1 mt-1"><img class="img-thumbnail" src="', e.target.result,'" title="', escape(theFile.name), '" style="height:100px;" /><div class="small text-muted text-center">', escape(theFile.name),'</div></div>'].join('');// 画像では画像のプレビューとファイル名の表示 } else { var $html = ['<div class="d-inline-block mr-1"><span class="small">', escape(theFile.name),'</span></div>'].join('');//画像以外はファイル名のみの表示 } $('#preview').append($html); }; })(f); reader.readAsDataURL(f); } $(this).next('.custom-file-label').html(+ files.length + '個のファイルを選択しました'); }

reader.readAsDataURL(f);reader.onloadが反応して関数がイベントを受け取っているのは理解できているのですが、
そのイベントを受け取る関数に引数を渡す関数の引数であるtheFileが何者かわかりません。

https://developer.mozilla.org/ja/docs/Web/API/FileReader

一応上記のサイトで調べているのですが、探し方が悪いのか見つかりません。

reader.readAsDataURL(f);が成功し、onloadでハンドリングされると、
必ず読み込んだファイルが格納される?theFileが存在するのでしょうか?

日本語的におかしいところや、認識違いによる誤った説明になっている部分もあるかと思いますが、
参考になるサイトなどございましたら教えていただけると幸いです。

ご確認よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

js

1// ↓ ここでファイルを「f」に代入 2 for (var i = 0, f; f = files[i]; i++) { 3 var reader = new FileReader(); 4// ↓ 即時関数の仮引数 5 reader.onload = (function(theFile) { 6// ↓ 関数(onloadに入る関数)を返している 7 return function(e) { 8 if (theFile.type.match('image.*')) { /* 略 */ } 9 $('#preview').append($html); 10 }; 11// ↓ 即時関数の引数にファイル渡す 12 })(f); 13// ↓ ここでファイルを読み込ませる 14 reader.readAsDataURL(f); 15 }

投稿2020/06/03 13:08

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arinc0

2020/06/04 01:21

丁寧に記述していただきありがとうございます。 即時関数が初耳だった為調べてみたところ、とても勉強になりました。 JavaScriptについてもしっかりと基礎を学習していきたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問