回答編集履歴

2

追記

2018/02/20 11:31

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -41,3 +41,109 @@
41
41
  });
42
42
 
43
43
  ```
44
+
45
+ # sample2
46
+
47
+
48
+
49
+ 複数のファイルをドラッグ・アンド・ドロップでバックグラウンドにアップロードし
50
+
51
+ すべてが終わったタイミングでアップロードしたファイル名を羅列
52
+
53
+ ```javascript
54
+
55
+ $(function() {
56
+
57
+ $("#droppable").on({
58
+
59
+ "dragenter dragover":function(e){
60
+
61
+ e.preventDefault();
62
+
63
+ return false;
64
+
65
+ },
66
+
67
+ "drop":function(e){
68
+
69
+ e.preventDefault();
70
+
71
+ $('#view').text("");
72
+
73
+ var ret="";
74
+
75
+ var defs=[];
76
+
77
+ var files = e.originalEvent.dataTransfer.files;
78
+
79
+ $.each(files,function(index,file){
80
+
81
+ var fr = new FileReader();
82
+
83
+ var def=$.Deferred();
84
+
85
+ fr.addEventListener("load", function(e){
86
+
87
+ var fd = new FormData();
88
+
89
+ fd.append("myfile", new Blob([e.target.result],{"type":file.type}),file.name );
90
+
91
+ /*recv.phpに対してmyfileというキーでファイルをアップロード*/
92
+
93
+ $.ajax({
94
+
95
+ "url":"recv.php",
96
+
97
+ "type":"post",
98
+
99
+ "data":fd,
100
+
101
+ "cache":false,
102
+
103
+ "processData": false,
104
+
105
+ "contentType": false,
106
+
107
+ }).done(function(data){
108
+
109
+ ret+="<li>"+file.name+"</li>";
110
+
111
+ return def.resolve();
112
+
113
+ });
114
+
115
+ });
116
+
117
+ fr.readAsArrayBuffer(file);
118
+
119
+ defs.push(def.promise());
120
+
121
+ });
122
+
123
+ $.when.apply(null,defs).done(function(){
124
+
125
+ $('#view').html("以下アップロードしました<ul>"+ret+"</ul>");
126
+
127
+ });
128
+
129
+ return false;
130
+
131
+ },
132
+
133
+ });
134
+
135
+ });
136
+
137
+ ```
138
+
139
+ ```HTML
140
+
141
+ <div id="droppable" style="border: gray solid 1em; padding: 2em;">
142
+
143
+ ファイルをドロップしてください。
144
+
145
+ </div>
146
+
147
+ <div id="view"></div>
148
+
149
+ ```

1

追記

2018/02/20 11:31

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -5,3 +5,39 @@
5
5
  順次アップロード完了メッセージを表示していくほうが現実的では?
6
6
 
7
7
  全部が終わるのをまって表示する意図がよくわかりません(もしそうなら)
8
+
9
+
10
+
11
+
12
+
13
+ # sample
14
+
15
+ ```javascript
16
+
17
+ $(function(){
18
+
19
+ var d1 = $.Deferred();
20
+
21
+ var d2 = $.Deferred();
22
+
23
+ var d3 = $.Deferred();
24
+
25
+ $.ajax({・・・}).done(function(){d1.resolve()});
26
+
27
+ $.ajax({・・・}).done(function(){d2.resolve()});
28
+
29
+ $.ajax({・・・}).done(function(){d3.resolve()});
30
+
31
+ $.when(
32
+
33
+ d1,d2,d3
34
+
35
+ ).done(function(){
36
+
37
+ console.log("end");
38
+
39
+ });
40
+
41
+ });
42
+
43
+ ```