回答編集履歴
1
追記
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
|
+
```
|