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

回答編集履歴

2

画像選択UIのHTML/JavaScriptコードを追記

2015/12/01 03:38

投稿

think49
think49

スコア18194

answer CHANGED
@@ -22,4 +22,73 @@
22
22
  CSVファイルを使う用途としてCSVファイルをサーバにUPしてデータベースに入れる処理はよくありますが、ひょっとしてそういう可能性はないでしょうか。
23
23
  だとすれば、`<input type="file">` でUPするだけの実装で済みますが。
24
24
 
25
+ (**2015/12/01 12:38追記**)
26
+
27
+ > このようなかんじで画像の横にチェックボタンを置き、最後に『送信』ボタンを押すと押されたものをまとめて渡すようにしたいのですが。
28
+
29
+ 次のように書きます(jsfiddleにサンプルUP済)。
30
+ - [画像リストをCSVフォーマットでサーバへ送信 - JSFiddle](http://jsfiddle.net/ejbnutvq/1/)
31
+
32
+ ```HTML
33
+ <!-- sample.php に画像リスト(csv)を送信する -->
34
+ <form id="sample" method="GET" action="sample.php">
35
+ <ul>
36
+ <li>
37
+ <label>
38
+ <input type="checkbox" name="image[]" value="1.jpg" />
39
+ <img src="images/1.JPG" alt="img01" width="250" height="50" />
40
+ </label>
41
+ </li>
42
+ <li>
43
+ <label>
44
+ <input type="checkbox" name="image[]" value="2.jpg" />
45
+ <img src="images/2.JPG" alt="img02" width="250" height="50" />
46
+ </label>
47
+ </li>
48
+ </ul>
49
+ <p><input type="submit" value="submit"></p>
50
+ </form>
51
+
52
+ <script>
53
+ 'use strict';
54
+ (function () {
55
+ function handleSubmit (event) {
56
+ var form = event.target,
57
+ inputs = form.elements['image[]'],
58
+ hidden = inputs[0].cloneNode(false),
59
+ imglist = [];
60
+
61
+ for (var i = 0, l = inputs.length, input; i < l; ++i) {
62
+ input = inputs[i];
63
+ if (input.checked) {
64
+ imglist.push(input.value);
65
+ input.disabled = true; // input[type=checkbox] の送信無効化
66
+ }
67
+ }
68
+
69
+ if (imglist.length > 0) {
70
+ hidden.type = 'hidden'; // input[type=chwckbox] の代替要素
71
+ hidden.value = imglist.join(); // "1.jpg,2.jpg” を代入(※画像ファイル名に " を含まない場合に限る。サーバサイドのCSVパーサが "," で区切って分割代入する仕様ならこの方法。RFC4180 準拠なら "" で各データセルを括る事。)
72
+ input.parentNode.insertBefore(hidden, input);
73
+ console.log(hidden);
74
+ } else {
75
+ console.log('no checked image');
76
+ }
77
+
78
+ event.preventDefault(); // 検証の為、submit をキャンセル (本番では外す)
79
+ }
80
+
81
+ function main () {
82
+ document.getElementById('sample').addEventListener('submit', handleSubmit, false); // 要 IE9+ (IE8- をサポートするなら attachEvent と併用)
83
+ }
84
+
85
+ main();
86
+ }());
87
+ </script>
88
+ ```
89
+
90
+ ただし、この場合はサーバサイドスクリプトが側で `input[type=checkbox]` を受け取って処理するのが普通です。
91
+ 送信前にわざわざ CSV フォーマットに変換しなくてもサーバ側で `image[]` のパラメータで選択した画像ファイル名を受け取れるわけですから CSV への変換コストが無駄になります。
92
+ サーバ側の仕様を変更できない事情があるなら仕方がないですが、このコードは非効率的な手段の為、サーバサイドスクリプト製作者と相談する事をお勧めします。
93
+
25
94
  Re: Yuki_Tsutsumiさん

1

CSVファイルをアップロードする実装の可能性

2015/12/01 03:38

投稿

think49
think49

スコア18194

answer CHANGED
@@ -18,4 +18,8 @@
18
18
 
19
19
  サーバへのリクエストに関しては `<form>` で送信するか、`XMLHttpRequest` で送信するか、を目的に合わせて選んでください。
20
20
 
21
+ **(2015/11/24 19:35追記)**
22
+ CSVファイルを使う用途としてCSVファイルをサーバにUPしてデータベースに入れる処理はよくありますが、ひょっとしてそういう可能性はないでしょうか。
23
+ だとすれば、`<input type="file">` でUPするだけの実装で済みますが。
24
+
21
25
  Re: Yuki_Tsutsumiさん