回答編集履歴

1

追記

2020/06/01 04:03

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -61,3 +61,77 @@
61
61
 
62
62
 
63
63
  別の質問への回答として [CODEPEN](https://codepen.io/AkitoshiManabe/pen/xxwZyRr) にプレビューサンプルを作ったことがありますが、これに**個別の削除(Ajax送信用 FormDataの再作成)機能**を加えることで、要件を満たす内容に近づけるのではないでしょうか。
64
+
65
+
66
+
67
+ ----
68
+
69
+ 追記)
70
+
71
+
72
+
73
+ jQueryの場合も、HTMLの on~ 属性に書かずに、イベントリスナを別途定義する手法に慣れてゆきます。
74
+
75
+ (イベントリスナの引数``evt``に渡されたオブジェクトは 伝搬情報として意味を持ったプロパティがあるため)
76
+
77
+
78
+
79
+ ```html
80
+
81
+ <input type="file" id="file_btn1" accept="image/*" name="file_btn1" multiple>
82
+
83
+ ```
84
+
85
+
86
+
87
+ ```javascript
88
+
89
+ const maxFiles = 5;
90
+
91
+ $(function(){
92
+
93
+
94
+
95
+ let $file_btn = $("#file_btn1");
96
+
97
+
98
+
99
+ // addEventListener() の jQuery による略記
100
+
101
+ $file_btn.on("change", function(evt){
102
+
103
+ // jQuery オブジェクトの最初の要素は Element が格納されているので
104
+
105
+ // 次のようにHTMLElementを取得できる。
106
+
107
+ // $(this)[0]; $(this).get(0);
108
+
109
+
110
+
111
+ // 変数 $file_btn に格納済みのjQueryオブジェクトを使っても良い。
112
+
113
+ let elm = $file_btn[0];
114
+
115
+ if( maxFiles < elm.files.length ) {
116
+
117
+
118
+
119
+ alert(`添付できるのは ${maxFiles} 枚までです` );
120
+
121
+
122
+
123
+ elm.value = null; // input[type=file] をリセット
124
+
125
+
126
+
127
+ return false;// イベントリスナを抜ける。
128
+
129
+ }
130
+
131
+ // プレビュー処理など。
132
+
133
+ })
134
+
135
+ });
136
+
137
+ ```