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

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

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

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

Q&A

解決済

1回答

663閲覧

複数のaddEventListenerを1つにまとめたい

risektj

総合スコア3

JavaScript

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

0グッド

0クリップ

投稿2020/11/11 03:50

ファイルアップローダが50個以上存在するフォームがあります。
すべてにaddEventListenerを持たせたいのですが、

Javascript

1 2$(function() { 3var filesizeLimit = 1024 * 1024 * 5; 4 5// 1個目のアップローダ 6var fileInput01 = document.getElementById('image01'); 7fileInput01.addEventListener('change', function(e){ 8 var file = e.target.files[0]; 9 if (file.size > filesizeLimit) { 10 alert("ファイルサイズ上限は5MBです。"); 11 fileInput01.value = ""; 12 return; 13 }else{ 14 var file = e.target.files[0]; 15 var blobUrl = window.URL.createObjectURL(file); 16 $('#image01-preview').attr('src', blobUrl); 17 } 18}, false); 19 20// 2個目のアップローダ 21var fileInput02 = document.getElementById('image02'); 22fileInput02.addEventListener('change', function(e){ 23 var file = e.target.files[0]; 24 if (file.size > filesizeLimit) { 25 alert("ファイルサイズ上限は5MBです。"); 26 fileInput02.value = ""; 27 return; 28 }else{ 29 var file = e.target.files[0]; 30 var blobUrl = window.URL.createObjectURL(file); 31 $('#image02-preview').attr('src', blobUrl); 32 } 33}, false); 34 35……………………以下全5036 37});

こんな風に同様のコードが長く続いてしまうのですが、
スマートに1つにまとめる事は可能でしょうか?

Javascript

1 2// 理想: IDを処理内でも使いたい 3var fileInput = document.getElementById(xxxxxxxxxxx); 4fileInput.addEventListener('change', function(e){ 5 var file = e.target.files[0]; 6 if (file.size > filesizeLimit) { 7 alert("ファイルサイズ上限は5MBです。"); 8 fileInput.value = ""; 9 return; 10 }else{ 11 var file = e.target.files[0]; 12 var blobUrl = window.URL.createObjectURL(file); 13 $('#'+xxxxxxxxxxx+'-preview').attr('src', blobUrl); 14 } 15}, false); 16

ID名の配列を作ってfor文で回してもaddEventListenerが反応しませんでした。

基本的にすべてのフォームで同様の処理(ファイルサイズチェック、#ID-previewのsrc変更処理、その他諸々)でOKです。
対策をご教示いただければ嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

jQueryですよね?

$(':file').on('change',function(){

とかで処理すればよいのでは?

投稿2020/11/11 03:54

yambejp

総合スコア116734

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

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

yambejp

2020/11/11 03:55

「$('#image01-preview')」についてもクラスを指定しておいてインデックスで 紐付けするとか、type=fileにカスタムデータで対象を振っておくとかで イケルと思います
risektj

2020/11/11 04:00

ご回答ありがとうございます。 その場合、changeしたフォームのIDの入力値の操作と ID.value = ""; $('#'+ID+'-preview').attr('src', blobUrl); の部分に使用するIDの抽出は可能でしょうか?
yambejp

2020/11/11 04:03

>changeしたフォームのID ソースが中途半端にしか提示されていないのでなんとも言えませんが $(this).attr('ID') 的な参照でいけるのでは?
risektj

2020/11/11 04:08

補足ありがとうございます。 試しに書いてみたのですが、 $(':file').on('change',function(e){ var fileId = $(this).attr('id'); console.log(fileId); , false); が出力されない様です。書き方が間違えているでしょうか?
yambejp

2020/11/11 04:14

$(':file').on('change',function(e){ var fileId = $(this).attr('id'); console.log(fileId); }); では?
risektj

2020/11/11 04:16

ありがとうございますm(__)m うまく動作しました。助かりました! お手数おかけいたしました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問