質問編集履歴

2

質問内容の変更をしました。

2017/07/26 09:59

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- LocalStorageを使って入力した値を表示し続けるいい方法がわかりません
1
+ LocalStorageを使って入力した値をフォーム内に表示し続ける方法がわかりません
test CHANGED
@@ -1,445 +1,169 @@
1
- ##LocalStorageで入力データを保存・表示させたい
1
+ ##フォームに入力したテキストをLocalStorageを使って保存・表示させたい
2
+
3
+ ■目標動作
4
+
5
+ 1,フォームにテキストを入力
6
+
7
+ 2,エンターキーで保存(保存ボタンは配置しない)
8
+
9
+ 3,入力されたテキストがlocalStorageで保存される
10
+
11
+ 4,フォーム内にそのままテキストが表示されている状態にする
12
+
13
+ 5,再度上書きで入力した場合2に戻る
14
+
15
+ __※ページ内にフォームが多数存在するため保存されたデータが混合しないようにする必要あり__
16
+
17
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2
18
 
3
19
 
4
20
 
5
- tableの行を増やす・文字を入力する・削除するデータボタンを押した際にをlocalstrageに保存したいです。
6
-
7
- 1, tableの行を追加・削除した情報の保存
8
-
9
- 2, 入力・修正した情報の保存
10
-
11
- 3, 保存された情報の自動読み込み表示
12
-
13
-
14
-
15
- 現在のソースコードでは保存ボタンが設置してありますが、現状ではこちらは何の挙動も致しません。
16
-
17
- イメージとしては**行の追加や文字の入力が完了して保存ボタンを押すことでデータが保存され、
18
-
19
- それをそのまま表示し続けてくれる**イメージです。
20
-
21
-
22
-
23
- もしくは、**保存ボタンを押さずともデータの保存・表示することが可能なのであれば保存ボタンは撤去する**予定です。
24
-
25
-
26
-
27
- 上記を動作させるためのいい方法がわからないため、教えていただければと思います。
28
-
29
-
30
-
31
- ◆下記対象のサンプルサイトです。
32
-
33
- [サンプル](http://portfoliotukapon.web.fc2.com/html/test.html)
21
+ 案としては、Lhankor_Mhyさんにコメントでいただいた[ローカルストレージ参考イト](https://team-lab.github.io/skillup-nodejs/1/6.html)の情報を使おうと考えています。
34
-
35
- __※無料レンタルサーバーにサンプルを上げました。__
36
-
37
-
38
-
39
- 現状のソースコードです。
40
-
41
- ```js
42
-
43
- <script>
44
-
45
- /**
46
-
47
- * 対象行の追加
48
-
49
- * @param テーブル要素
50
-
51
- */
52
-
53
- var addLine = function(tblEl) {
54
-
55
-
56
-
57
- // テーブルの要素取得
58
-
59
- var table = document.getElementById(tblEl);
60
-
61
-
62
-
63
- // 行を行末に追加
64
-
65
- // 0指定で先頭追加
66
-
67
- var tr = table.insertRow(-1);
68
-
69
-
70
-
71
- // セルの挿入
72
-
73
-
74
-
75
- // 0指定で先頭挿入
76
-
77
- var td1 = tr.insertCell(-1),
78
-
79
- td2 = tr.insertCell(-1),
80
-
81
- td3 = tr.insertCell(-1),
82
-
83
- td4 = tr.insertCell(-1),
84
-
85
- td5 = tr.insertCell(-1);
86
-
87
-
88
-
89
- // input用 タグ
90
-
91
- var tag1 = '<input class="input_size" type="text" value="" />',
92
-
93
- tag2 = '<input class="input_size" type="text" value="" />',
94
-
95
- tag3 = '<input class="input_size" type="text" value="" />',
96
-
97
- tag4 = '<input class="input_size" type="text" value="" />';
98
-
99
- // ボタン用 タグ
100
-
101
- var button = '<input class="input_button_c" type="button" value="行削除" onclick="delLine(this)" />';
102
22
 
103
23
 
104
24
 
105
25
 
106
26
 
107
- // 行数取得
27
+ ◆[サンプル](http://portfoliotukapon.web.fc2.com/html/test2.html)
108
28
 
29
+ そこでお聞きしたいのが、上記参考サイトですと追加ボタンを押すことでフォーム内には保存されずフォームの下に書き出されてしまいます。
30
+
31
+ これを
32
+
109
- var row_len = table.rows.length;
33
+ - 保存されたデータをフォームの下に表示する挙動を、そのままフォーム内に表示する挙動に変更
34
+
35
+ - 「追加ボタン」を押すことで保存される挙動を「エンターキー」を押すことで保存される挙動に変更(追加ボタン撤去)
36
+
37
+ - フォームが複数個あっても動くように変更
110
38
 
111
39
 
112
40
 
113
- // セルへ要素を挿入
41
+ としたいで。この書き方がわからないためご教示願います。
114
-
115
- td1.innerHTML = tag1;
116
-
117
- td2.innerHTML = tag2;
118
-
119
- td3.innerHTML = tag3;
120
-
121
- td4.innerHTML = tag4;
122
-
123
- td5.innerHTML = button;
124
42
 
125
43
 
126
44
 
127
- //最後にclassNameを追加
45
+ __※[参考サイト](https://team-lab.github.io/skillup-nodejs/1/6.html)にもソースコードの記載がありますが、下記にも記載します。__
128
46
 
129
- td1.className = 'mail_tx2';
47
+ ```html
130
48
 
131
- td2.className = 'mail_tx2';
49
+ <!DOCTYPE html>
132
50
 
133
- td3.className = 'mail_tx2';
51
+ <html>
134
52
 
135
- td4.className = 'mail_tx2';
53
+ <head>
136
54
 
137
- td5.className = 'mail_tx3';
55
+ <title>localStorageのサンプル</title>
138
56
 
57
+ </head>
58
+
139
- }
59
+ <body>
60
+
61
+ <div id="form">
62
+
63
+ <input id="formText" type="text" size="50">
64
+
65
+ <input id="formButton" type="button" value="追加">
66
+
67
+ </div>
68
+
69
+ <div id="list"></div>
140
70
 
141
71
 
142
72
 
143
- /**
73
+ <script src="http://code.jquery.com/jquery-2.0.0.min.js"></script>
144
74
 
145
- * 対象行の削除
75
+ <script src="local_test.js"></script>
146
76
 
147
- * @param input
77
+ </body>
148
78
 
149
- */
79
+ </html>
150
80
 
81
+ ```
82
+
83
+ ```js
84
+
151
- var delLine = function(targetEl) {
85
+ $(loaded);
152
86
 
153
87
 
154
88
 
155
- // inputの親要素のtrを取得する
89
+ function loaded() {
156
90
 
91
+ showText();
92
+
93
+ // ボタンをクリックしたときに実行するイベントを設定する
94
+
157
- tr = targetEl.parentNode.parentNode;
95
+ $("#formButton").click(
96
+
97
+ // コールバックとしてメソッドを引数にわたす
98
+
99
+ function() {
100
+
101
+ saveText();
102
+
103
+ showText();
104
+
105
+ });
106
+
107
+ }
158
108
 
159
109
 
160
110
 
161
- // 対象のtr行削除する
111
+ // 入力された内容ローカルストレージに保存する
162
112
 
163
- tr.parentNode.deleteRow(tr.sectionRowIndex);
113
+ function saveText() {
164
114
 
165
- }
115
+ // 時刻をキーにして入力されたテキストを保存する
166
116
 
167
- </script>
117
+ var text = $("#formText");
168
118
 
169
- ```
119
+ var time = new Date();
170
120
 
171
- ```html
121
+ localStorage.setItem(time, text.val());
172
122
 
173
- <body>
123
+ // テキストボックスを空にする
174
124
 
175
- <div class="mail">
125
+ text.val("");
176
-
177
- <table class="mail_table" id="variable_tbl">
178
-
179
- <tr>
180
-
181
- <th class="th_inline" colspan="1">メール</th>
182
-
183
- <th class="th_none" colspan="4">
184
-
185
- <input class="input_button_a" type="button" value="行追加" onclick="addLine('variable_tbl')" />
186
-
187
- </th>
188
-
189
- </tr>
190
-
191
- <tr>
192
-
193
- <td class="mail_tx1">コンテンツ名</td>
194
-
195
- <td class="mail_tx1">メール</td>
196
-
197
- <td class="mail_tx1">パスワード</td>
198
-
199
- <td class="mail_tx1">リンク先</td>
200
-
201
- <td class="mail_tx1_2"><input class="input_button_b" type="button" value="保存" onclick="saveLine(this)" /></td>
202
-
203
- </tr>
204
-
205
- <tr>
206
-
207
- <td class="mail_tx2"><input class="input_size" type="text" value="" /></td>
208
-
209
- <td class="mail_tx2"><input class="input_size" type="text" value="" /></td>
210
-
211
- <td class="mail_tx2"><input class="input_size" type="text" value="" /></td>
212
-
213
- <td class="mail_tx2"><input class="input_size" type="text" value="" /></td>
214
-
215
- <td class="mail_tx3"><input class="input_button_c" type="button" value="行削除" onclick="delLine(this)" /></td>
216
-
217
- </tr>
218
-
219
- </table>
220
-
221
- </div>
222
-
223
- </body>
224
-
225
- ```
226
-
227
- ```css
228
-
229
- body{
230
-
231
- width:100%;
232
-
233
- height: 100%;
234
-
235
- margin: auto;
236
-
237
- background-color: #bebebe;
238
-
239
- text-align: center;
240
126
 
241
127
  }
242
128
 
243
- a{
244
129
 
245
- text-decoration: none;
246
130
 
247
- }
131
+ // ローカルストレージに保存した値を再描画する
248
132
 
249
- .mail{
133
+ function showText() {
250
134
 
251
- margin: auto;
135
+ // すでにある要素を削除する
252
136
 
253
- margin-top: 20px;
137
+ var list = $("#list");
254
138
 
255
- max-width: 1200px;
139
+ list.children().remove();
256
140
 
257
- text-align: center;
141
+ // ローカルストレージに保存された値すべてを要素に追加する
258
142
 
259
- }
143
+ var key, value, html = [];
260
144
 
261
- .mail_table{
145
+ for(var i=0, len=localStorage.length; i<len; i++) {
262
146
 
263
- vertical-align:middle;
147
+ key = localStorage.key(i);
264
148
 
265
- max-width: 100%;
149
+ value = localStorage.getItem(key);
266
150
 
267
- border-collapse: collapse;
151
+ html.push($("<p>").text(value));
268
152
 
269
- border-right: 1px solid #999;
153
+ }
270
154
 
271
- }
272
-
273
- .th_inline{
274
-
275
- white-space: nowrap;
276
-
277
- width: 300px;
278
-
279
- font-size: 30px;
280
-
281
- padding: 6px;
282
-
283
- text-align: center;
284
-
285
- color: #fff;
286
-
287
- background-color: #555;
288
-
289
- border-left: 5px solid #ff6633;
290
-
291
- border-top: 1px solid #fff;
292
-
293
- }
294
-
295
- .th_none{
296
-
297
- width: 300px;
298
-
299
- font-size: 30px;
300
-
301
- padding: 6px;
302
-
303
- text-align: right;
155
+ list.append(html);
304
-
305
- color: #fff;
306
-
307
- background-color: #555;
308
-
309
- border-top: 1px solid #fff;
310
-
311
- }
312
-
313
- .input_button_a{
314
-
315
- color: #fff;
316
-
317
- background-color: #316745;
318
-
319
- border-radius: 30px;
320
-
321
- border: 1px solid #fff;
322
-
323
- height: 40px;
324
-
325
- width: 80px;
326
-
327
- font-family: "メイリオ", "Meirio";
328
-
329
- font-weight: lighter;
330
-
331
- font-size: 16px;
332
-
333
- }
334
-
335
- .input_button_b{
336
-
337
- color: #fff;
338
-
339
- background-color: #203744;
340
-
341
- font-family: "游明朝", "Yu Mincho";
342
-
343
- font-weight: lighter;
344
-
345
- font-size: 14px;
346
-
347
- }
348
-
349
- .input_button_c{
350
-
351
- color: #d6d6d6;
352
-
353
- background-color: #d33d3d;
354
-
355
- font-family: "游明朝", "Yu Mincho";
356
-
357
- font-weight: lighter;
358
-
359
- font-size: 14px;
360
-
361
- }
362
-
363
- .input_size{
364
-
365
- width: 250px;
366
-
367
- border: 0px solid #aaa;
368
-
369
- text-align: center;
370
-
371
- font-family: "游明朝", "Yu Mincho";
372
-
373
- font-weight: lighter;
374
-
375
- font-size: 16px;
376
-
377
- }
378
-
379
- .mail_tx1{
380
-
381
- width: 300px;
382
-
383
- color: #fff;
384
-
385
- text-align: center;
386
-
387
- border-bottom: 1px solid #999;
388
-
389
- border-left: 1px solid #999;
390
-
391
- background-color: #b1b1b1;
392
-
393
- }
394
-
395
- .mail_tx2{
396
-
397
- height: 20px;
398
-
399
- width: 300px;
400
-
401
- padding: 6px;
402
-
403
- background-color: #fff;
404
-
405
- border-bottom: 1px solid #999;
406
-
407
- border-left: 1px solid #999;
408
-
409
- border-right: 1px solid #999;
410
-
411
- }
412
-
413
- .mail_tx3{
414
-
415
- height: 20px;
416
-
417
- width: 60px;
418
-
419
- padding: 6px;
420
-
421
- background-color: #fff;
422
-
423
- border-bottom: 1px solid #999;
424
-
425
- border-left: 1px solid #999;
426
-
427
- }
428
-
429
- .mail_tx1_2{
430
-
431
- width: 60px;
432
-
433
- color: #fff;
434
-
435
- text-align: center;
436
-
437
- border-bottom: 1px solid #999;
438
-
439
- border-left: 1px solid #999;
440
-
441
- background-color: #b1b1b1;
442
156
 
443
157
  }
444
158
 
445
159
  ```
160
+
161
+
162
+
163
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
164
+
165
+ フォームが複数個あるという部分の意味は下記サンプルをご覧ください。
166
+
167
+ テーブル内の全てのセルにフォームを入れるため多数になります。
168
+
169
+ ◆[サンプル](http://portfoliotukapon.web.fc2.com/html/test1.html)

1

文言修正しました。(local strage → LocalStorage)

2017/07/26 09:59

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- local strageを使って入力した値を表示し続けるいい方法がわかりません
1
+ LocalStorageを使って入力した値を表示し続けるいい方法がわかりません
test CHANGED
@@ -1,4 +1,4 @@
1
- ##local strageで入力データを保存・表示させたい
1
+ ##LocalStorageで入力データを保存・表示させたい
2
2
 
3
3
 
4
4