teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/06/01 04:03

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -29,4 +29,41 @@
29
29
  ```
30
30
 
31
31
 
32
- 別の質問への回答として [CODEPEN](https://codepen.io/AkitoshiManabe/pen/xxwZyRr) にプレビューサンプルを作ったことがありますが、これに**個別の削除(Ajax送信用 FormDataの再作成)機能**を加えることで、要件を満たす内容に近づけるのではないでしょうか。
32
+ 別の質問への回答として [CODEPEN](https://codepen.io/AkitoshiManabe/pen/xxwZyRr) にプレビューサンプルを作ったことがありますが、これに**個別の削除(Ajax送信用 FormDataの再作成)機能**を加えることで、要件を満たす内容に近づけるのではないでしょうか。
33
+
34
+ ----
35
+ 追記)
36
+
37
+ jQueryの場合も、HTMLの on~ 属性に書かずに、イベントリスナを別途定義する手法に慣れてゆきます。
38
+ (イベントリスナの引数``evt``に渡されたオブジェクトは 伝搬情報として意味を持ったプロパティがあるため)
39
+
40
+ ```html
41
+ <input type="file" id="file_btn1" accept="image/*" name="file_btn1" multiple>
42
+ ```
43
+
44
+ ```javascript
45
+ const maxFiles = 5;
46
+ $(function(){
47
+
48
+ let $file_btn = $("#file_btn1");
49
+
50
+ // addEventListener() の jQuery による略記
51
+ $file_btn.on("change", function(evt){
52
+ // jQuery オブジェクトの最初の要素は Element が格納されているので
53
+ // 次のようにHTMLElementを取得できる。
54
+ // $(this)[0]; $(this).get(0);
55
+
56
+ // 変数 $file_btn に格納済みのjQueryオブジェクトを使っても良い。
57
+ let elm = $file_btn[0];
58
+ if( maxFiles < elm.files.length ) {
59
+
60
+ alert(`添付できるのは ${maxFiles} 枚までです` );
61
+
62
+ elm.value = null; // input[type=file] をリセット
63
+
64
+ return false;// イベントリスナを抜ける。
65
+ }
66
+ // プレビュー処理など。
67
+ })
68
+ });
69
+ ```