質問編集履歴

4

2022/01/15 03:02

投稿

oil
oil

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,543 +1,270 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
- ####ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
3
+ # ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
6
-
7
-
8
-
9
- #####[完成した物](http://deadline.oilblog.net/)
10
-
11
-
12
4
 
13
5
  ### 発生している問題・エラーメッセージ
14
6
 
15
7
 
16
-
17
-
18
-
19
- ####JavaScriptで、
8
+ #### JavaScriptで、
20
-
21
-
22
-
9
+
23
- ####TODOリストにラジオボタンで4つの条件分岐を付けて、
10
+ #### TODOリストにラジオボタンで4つの条件分岐を付けて、
24
-
25
-
26
-
11
+
27
- ####4つの<ul>に、appendChild(li);で<li>タグを追加して、
12
+ #### 4つの<ul>に、appendChild(li);で<li>タグを追加して、
28
-
29
-
30
-
13
+
31
- ####振り分けをした状態のままの保存方法がどうすれば良いのか分かりません。
14
+ #### 振り分けをした状態のままの保存方法がどうすれば良いのか分かりません。
32
-
33
-
34
-
15
+
35
- ####現状は、document.querySelectorAll("li");で、
16
+ #### 現状は、document.querySelectorAll("li");で、
36
-
37
-
38
-
17
+
39
- ####<li>タグがまとめて保存されてしまいます。
18
+ #### <li>タグがまとめて保存されてしまいます。
40
-
41
-
42
-
19
+
43
- ####querySelectorAll("li");をどう変えれば良いのか教えて下さい。
20
+ #### querySelectorAll("li");をどう変えれば良いのか教えて下さい。
44
-
45
-
46
-
21
+
47
- ####よろしくお願いします。
22
+ #### よろしくお願いします。
48
-
49
-
50
-
51
23
 
52
24
 
53
25
  ### 該当のソースコード
54
26
 
55
-
56
-
57
27
  ```JavaScript
58
-
59
28
  const form = document.getElementById("form");
60
-
61
29
  const input = document.getElementById("input");
62
-
63
30
  const ul_0 = document.getElementById("ul_0");
64
-
65
31
  const ul_1 = document.getElementById("ul_1");
66
-
67
32
  const ul_2 = document.getElementById("ul_2");
68
-
69
33
  const ul_3 = document.getElementById("ul_3");
70
-
71
34
  const all_radio = document.getElementById("all_radio");
72
35
 
73
-
74
-
75
36
  // ローカルデータ読み込み
76
-
77
37
  let todos = JSON.parse(localStorage.getItem("todos"));
78
-
79
38
  if (todos) {
80
-
81
39
  // 配列の全要素に対して反復処理
82
-
83
40
  todos.forEach((todo) => {
84
-
85
41
  add(todo);
86
-
87
42
  });
88
-
89
43
  }
90
-
91
44
  // フォームがエンター(submit)された時処理
92
-
93
45
  form.addEventListener("submit", function (event) {
94
-
95
46
  // デフォルトのイベント中止(エンター後のリロード)
96
-
97
47
  event.preventDefault();
98
-
99
48
  // 下記の関数submit後に行いたい処理
100
-
101
49
  add();
102
-
103
50
  });
104
51
 
105
-
106
-
107
52
  function add(todo) {
108
-
109
53
  // フォームに入力された値を取る
110
-
111
54
  let todoText = input.value;
112
55
 
113
-
114
-
115
56
  if (todo) {
116
-
117
57
  todoText = todo.text;
118
-
119
58
  }
120
-
121
59
  // フォームが空の状態でのliタグの追加を防ぐ
122
-
123
60
  if (todoText.length > 0) {
124
-
125
61
  // liタグの作成
126
-
127
62
  const li = document.createElement("li");
128
-
129
63
  // liにフォームに入力された値を入れる
130
-
131
64
  li.innerText = todoText;
132
-
133
65
  // liタグにlist-group-itemクラスの追加、デザインの為
134
-
135
66
  li.classList.add("list-group-item");
136
67
 
137
-
138
-
139
68
  // ラジオボタンの選択された値
140
-
141
69
  let radioNodeList = all_radio.deadline;
142
-
143
70
  let radiobtn = radioNodeList.value;
144
71
 
145
-
146
-
147
72
  switch (radiobtn) {
148
-
149
73
  case "0":
150
-
151
74
  // ul_0の子要素として追加する
152
-
153
75
  ul_0.appendChild(li);
154
-
155
76
  // フォームを空にする
156
-
157
- input.value = "";
77
+ input.value = "";
158
-
159
78
  // ローカルストレージに保存する
160
-
161
- saveDate();
79
+ saveDate();
162
-
163
80
  break;
164
-
165
81
  case "1":
166
-
167
82
  ul_1.appendChild(li);
168
-
169
- input.value = "";
83
+ input.value = "";
170
-
171
- saveDate();
84
+ saveDate();
172
-
173
85
  break;
174
-
175
86
  case "2":
176
-
177
87
  ul_2.appendChild(li);
178
-
179
- input.value = "";
88
+ input.value = "";
180
-
181
- saveDate();
89
+ saveDate();
182
-
183
90
  break;
184
-
185
91
  case "3":
186
-
187
92
  ul_3.appendChild(li);
188
-
189
- input.value = "";
93
+ input.value = "";
190
-
191
- saveDate();
94
+ saveDate();
192
-
193
95
  }
194
96
 
195
-
196
-
197
97
  if (todo && todo.completed) {
198
-
199
98
  li.classList.add("text-decoration-line-through");
200
-
201
99
  }
202
100
 
203
-
204
-
205
101
  li.addEventListener("contextmenu", function (event) {
206
-
207
102
  // 右クリックイベントブロック
208
-
209
103
  event.preventDefault();
210
-
211
104
  li.remove();
212
-
213
105
  saveDate();
214
-
215
106
  });
216
107
 
217
-
218
-
219
108
  li.addEventListener("click", function () {
220
-
221
109
  li.classList.toggle("text-decoration-line-through");
222
-
223
110
  saveDate();
224
-
225
111
  });
226
-
227
112
  }
228
-
229
113
  }
230
-
231
114
  // li要素を取得して、配列としてまとめておく
232
-
233
115
  function saveDate() {
234
-
235
116
  const lists = document.querySelectorAll("li");
236
-
237
117
  // 空の配列を定義
238
-
239
118
  const todos = [];
240
119
 
241
-
242
-
243
120
  // 配列の全要素に対して反復処理
244
-
245
121
  lists.forEach((li) => {
246
-
247
122
  // todosの配列に追加していく処理
248
-
249
123
  todos.push({
250
-
251
124
  // 入力された値
252
-
253
125
  text: li.innerText,
254
-
255
126
  completed: li.classList.contains("text-decoration-line-through"),
256
-
257
127
  });
258
-
259
128
  });
260
-
261
129
  // jsonでローカルデータ保存
262
-
263
130
  localStorage.setItem("todos", JSON.stringify(todos));
264
-
265
131
  }
266
132
 
267
-
268
-
269
133
  // リセットボタン
270
-
271
134
  const Reset = document.getElementById("Reset");
272
135
 
273
-
274
-
275
136
  Reset.addEventListener("click", function () {
276
-
277
137
  // 子要素全消去
278
-
279
138
  all_ul.innerHTML = "";
280
-
281
139
  window.location.reload();
282
-
283
140
  saveDate();
284
-
285
141
  });
286
142
 
287
-
288
-
289
143
  ```
290
144
 
291
-
292
-
293
145
  ```HTML
294
-
295
146
  <!DOCTYPE html>
296
-
297
147
  <html lang="ja">
298
-
299
148
  <head>
300
-
301
149
  <meta charset="UTF-8" />
302
-
303
150
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
304
-
305
151
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
306
152
 
307
-
308
-
309
153
  <!-- CSS -->
310
-
311
154
  <link
312
-
313
155
  href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css"
314
-
315
156
  rel="stylesheet"
316
-
317
157
  integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
318
-
319
158
  crossorigin="anonymous"
320
-
321
159
  />
322
160
 
323
-
324
-
325
161
  <title>条件分岐の練習</title>
326
-
327
162
  </head>
328
-
329
163
  <body class="bg-light">
330
-
331
164
  <div class="container w-100">
332
-
333
165
  <h1 class="text-center text-info my-4">納期管理アプリ</h1>
334
166
 
335
-
336
-
337
167
  <form id="all_radio">
338
-
339
168
  <div class="responsibility">
340
-
341
- <div class="form-check">
169
+ <div class="form-check">
342
-
343
- <input
170
+ <input
344
-
345
- class="form-check-input"
171
+ class="form-check-input"
346
-
347
- type="radio"
172
+ type="radio"
348
-
349
- name="deadline"
173
+ name="deadline"
350
-
351
174
  id="t_t"
352
-
353
175
  value="0"
354
-
355
176
  checked
356
-
357
- />
177
+ />
358
-
359
178
  <label class="form-check-label" for="flexRadioDefault2">
360
-
361
179
  通常業務、通常配送
362
-
363
- </label>
180
+ </label>
364
-
365
- </div>
181
+ </div>
366
-
367
- <div class="form-check">
182
+ <div class="form-check">
368
-
369
- <input
183
+ <input
370
-
371
- class="form-check-input"
184
+ class="form-check-input"
372
-
373
- type="radio"
185
+ type="radio"
374
-
375
- name="deadline"
186
+ name="deadline"
376
-
377
187
  id="t_k"
378
-
379
188
  value="1"
380
-
381
- />
189
+ />
382
-
383
190
  <label class="form-check-label" for="flexRadioDefault1">
384
-
385
191
  通常業務、緊急配送
386
-
387
- </label>
192
+ </label>
388
-
389
- </div>
193
+ </div>
390
-
391
194
  </div>
392
195
 
393
-
394
-
395
196
  <div class="deadline mt-3">
396
-
397
- <div class="form-check">
197
+ <div class="form-check">
398
-
399
- <input
198
+ <input
400
-
401
- class="form-check-input"
199
+ class="form-check-input"
402
-
403
- type="radio"
200
+ type="radio"
404
-
405
- name="deadline"
201
+ name="deadline"
406
-
407
202
  id="j_t"
408
-
409
203
  value="2"
410
-
411
- />
204
+ />
412
-
413
205
  <label class="form-check-label" for="flexRadioDefault2">
414
-
415
206
  重要業務、通常配送
416
-
417
- </label>
207
+ </label>
418
-
419
- </div>
208
+ </div>
420
-
421
- <div class="form-check">
209
+ <div class="form-check">
422
-
423
- <input
210
+ <input
424
-
425
- class="form-check-input"
211
+ class="form-check-input"
426
-
427
- type="radio"
212
+ type="radio"
428
-
429
- name="deadline"
213
+ name="deadline"
430
-
431
214
  id="j_k"
432
-
433
215
  value="3"
434
-
435
- />
216
+ />
436
-
437
217
  <label class="form-check-label" for="flexRadioDefault1">
438
-
439
218
  重要業務、緊急配送
440
-
441
- </label>
219
+ </label>
442
-
443
- </div>
220
+ </div>
444
-
445
221
  </div>
446
-
447
222
  </form>
448
223
 
449
-
450
-
451
224
  <form id="form" class="mt-2 mb-5">
452
-
453
225
  <input
454
-
455
226
  id="input"
456
-
457
227
  class="form-control"
458
-
459
228
  placeholder="納期、送り先を入力"
460
-
461
229
  autocomplete="off"
462
-
463
230
  />
464
-
465
231
  </form>
466
232
 
467
-
468
-
469
233
  <div id="all_ul" class="f-container">
470
-
471
234
  <ul class="list-group text-secondary" id="ul_3">
472
-
473
235
  重要、緊急
474
-
475
- </ul>
236
+ </ul>
476
-
477
237
  <ul class="list-group text-secondary" id="ul_2">
478
-
479
238
  重要、通常
480
-
481
- </ul>
239
+ </ul>
482
-
483
240
  <ul class="list-group text-secondary" id="ul_1">
484
-
485
241
  通常、緊急
486
-
487
- </ul>
242
+ </ul>
488
-
489
243
  <ul class="list-group text-secondary" id="ul_0">
490
-
491
244
  通常、通常
492
-
493
- </ul>
245
+ </ul>
494
-
495
246
  </div>
496
-
497
247
  </div>
498
248
 
499
-
500
-
501
249
  <!-- Resetボタン -->
502
-
503
250
  <div class="d-grid gap-2 col-1 mx-auto pt-5">
504
-
505
251
  <button id="Reset" class="btn btn-primary" type="button">Reset</button>
506
-
507
252
  </div>
508
253
 
509
-
510
-
511
254
  <script src="todo.js"></script>
512
-
513
255
  </body>
514
-
515
256
  </html>
516
257
 
517
-
518
-
519
258
  ```
520
259
 
521
-
522
-
523
260
  ### 試したこと
524
261
 
525
-
526
-
527
262
  追加する<li>タグに.classNameでクラスの追加や、
528
263
 
529
-
530
-
531
264
  querySelectorで、<ul>タグを保存しようとしましたが、
532
265
 
533
-
534
-
535
266
  上手くいきませんでした。
536
267
 
537
-
538
-
539
268
  ### 補足情報(FW/ツールのバージョンなど)
540
269
 
541
-
542
-
543
270
  ここにより詳細な情報を記載してください。

3

文字サイズ変更、リンク追加

2021/12/23 14:51

投稿

oil
oil

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- #ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
5
+ ####ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
6
+
7
+
8
+
9
+ #####[完成した物](http://deadline.oilblog.net/)
6
10
 
7
11
 
8
12
 

2

markdown記法を使ってみた

2021/12/23 14:51

投稿

oil
oil

スコア11

test CHANGED
@@ -1 +1 @@
1
- 条件分岐で、4つの<ul>に、appendChild(li);で<li>タグを追加て、振り分けをした状態のままの保存方法がどうすれば良のか分かりません
1
+ ブラウザをリロードすると、条件分岐で振り分けた<li>タグが、1箇所にまとまってまうのしたい。
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
5
+ #ブラウザをリロードすると、振り分けた<li>タグが1っ箇所にまとまってしまうのを直したい。
6
6
 
7
7
 
8
8
 
@@ -10,37 +10,505 @@
10
10
 
11
11
 
12
12
 
13
+
14
+
15
+ ####JavaScriptで、
16
+
17
+
18
+
19
+ ####TODOリストにラジオボタンで4つの条件分岐を付けて、
20
+
21
+
22
+
23
+ ####4つの<ul>に、appendChild(li);で<li>タグを追加して、
24
+
25
+
26
+
27
+ ####振り分けをした状態のままの保存方法がどうすれば良いのか分かりません。
28
+
29
+
30
+
31
+ ####現状は、document.querySelectorAll("li");で、
32
+
33
+
34
+
35
+ ####<li>タグがまとめて保存されてしまいます。
36
+
37
+
38
+
39
+ ####querySelectorAll("li");をどう変えれば良いのか教えて下さい。
40
+
41
+
42
+
43
+ ####よろしくお願いします。
44
+
45
+
46
+
47
+
48
+
49
+ ### 該当のソースコード
50
+
51
+
52
+
53
+ ```JavaScript
54
+
55
+ const form = document.getElementById("form");
56
+
57
+ const input = document.getElementById("input");
58
+
59
+ const ul_0 = document.getElementById("ul_0");
60
+
61
+ const ul_1 = document.getElementById("ul_1");
62
+
63
+ const ul_2 = document.getElementById("ul_2");
64
+
65
+ const ul_3 = document.getElementById("ul_3");
66
+
67
+ const all_radio = document.getElementById("all_radio");
68
+
69
+
70
+
71
+ // ローカルデータ読み込み
72
+
73
+ let todos = JSON.parse(localStorage.getItem("todos"));
74
+
75
+ if (todos) {
76
+
77
+ // 配列の全要素に対して反復処理
78
+
79
+ todos.forEach((todo) => {
80
+
81
+ add(todo);
82
+
83
+ });
84
+
85
+ }
86
+
87
+ // フォームがエンター(submit)された時処理
88
+
89
+ form.addEventListener("submit", function (event) {
90
+
91
+ // デフォルトのイベント中止(エンター後のリロード)
92
+
93
+ event.preventDefault();
94
+
95
+ // 下記の関数submit後に行いたい処理
96
+
97
+ add();
98
+
99
+ });
100
+
101
+
102
+
103
+ function add(todo) {
104
+
105
+ // フォームに入力された値を取る
106
+
107
+ let todoText = input.value;
108
+
109
+
110
+
111
+ if (todo) {
112
+
113
+ todoText = todo.text;
114
+
115
+ }
116
+
117
+ // フォームが空の状態でのliタグの追加を防ぐ
118
+
119
+ if (todoText.length > 0) {
120
+
121
+ // liタグの作成
122
+
123
+ const li = document.createElement("li");
124
+
125
+ // liにフォームに入力された値を入れる
126
+
127
+ li.innerText = todoText;
128
+
129
+ // liタグにlist-group-itemクラスの追加、デザインの為
130
+
131
+ li.classList.add("list-group-item");
132
+
133
+
134
+
135
+ // ラジオボタンの選択された値
136
+
137
+ let radioNodeList = all_radio.deadline;
138
+
139
+ let radiobtn = radioNodeList.value;
140
+
141
+
142
+
143
+ switch (radiobtn) {
144
+
145
+ case "0":
146
+
147
+ // ul_0の子要素として追加する
148
+
149
+ ul_0.appendChild(li);
150
+
151
+ // フォームを空にする
152
+
153
+ input.value = "";
154
+
155
+ // ローカルストレージに保存する
156
+
157
+ saveDate();
158
+
159
+ break;
160
+
161
+ case "1":
162
+
163
+ ul_1.appendChild(li);
164
+
165
+ input.value = "";
166
+
167
+ saveDate();
168
+
169
+ break;
170
+
171
+ case "2":
172
+
173
+ ul_2.appendChild(li);
174
+
175
+ input.value = "";
176
+
177
+ saveDate();
178
+
179
+ break;
180
+
181
+ case "3":
182
+
183
+ ul_3.appendChild(li);
184
+
185
+ input.value = "";
186
+
187
+ saveDate();
188
+
189
+ }
190
+
191
+
192
+
193
+ if (todo && todo.completed) {
194
+
195
+ li.classList.add("text-decoration-line-through");
196
+
197
+ }
198
+
199
+
200
+
201
+ li.addEventListener("contextmenu", function (event) {
202
+
203
+ // 右クリックイベントブロック
204
+
205
+ event.preventDefault();
206
+
207
+ li.remove();
208
+
209
+ saveDate();
210
+
211
+ });
212
+
213
+
214
+
215
+ li.addEventListener("click", function () {
216
+
217
+ li.classList.toggle("text-decoration-line-through");
218
+
219
+ saveDate();
220
+
221
+ });
222
+
223
+ }
224
+
225
+ }
226
+
227
+ // li要素を取得して、配列としてまとめておく
228
+
229
+ function saveDate() {
230
+
231
+ const lists = document.querySelectorAll("li");
232
+
233
+ // 空の配列を定義
234
+
235
+ const todos = [];
236
+
237
+
238
+
239
+ // 配列の全要素に対して反復処理
240
+
241
+ lists.forEach((li) => {
242
+
243
+ // todosの配列に追加していく処理
244
+
245
+ todos.push({
246
+
247
+ // 入力された値
248
+
249
+ text: li.innerText,
250
+
251
+ completed: li.classList.contains("text-decoration-line-through"),
252
+
253
+ });
254
+
255
+ });
256
+
257
+ // jsonでローカルデータ保存
258
+
259
+ localStorage.setItem("todos", JSON.stringify(todos));
260
+
261
+ }
262
+
263
+
264
+
265
+ // リセットボタン
266
+
267
+ const Reset = document.getElementById("Reset");
268
+
269
+
270
+
271
+ Reset.addEventListener("click", function () {
272
+
273
+ // 子要素全消去
274
+
275
+ all_ul.innerHTML = "";
276
+
277
+ window.location.reload();
278
+
279
+ saveDate();
280
+
281
+ });
282
+
283
+
284
+
13
285
  ```
14
286
 
15
- JavaScriptで、
16
-
17
-
18
-
19
- TODOリストにラジオボタンで4つの条件分岐を付けて、
20
-
21
-
22
-
23
- 4つの<ul>に、appendChild(li);で<li>タグを追加して、
24
-
25
-
26
-
27
- 振り分けをした状態のままの保存方法がどうすれば良いのか分かりません。
28
-
29
-
30
-
31
- 現状は、document.querySelectorAll("li");で、
32
-
33
-
34
-
35
- <li>タグがまとめて保存されてしまいます。
36
-
37
-
38
-
39
- querySelectorAll("li");をどう変えれば良いのか教えて下さい。
40
-
41
-
42
-
43
- よろしくお願いします。
287
+
288
+
289
+ ```HTML
290
+
291
+ <!DOCTYPE html>
292
+
293
+ <html lang="ja">
294
+
295
+ <head>
296
+
297
+ <meta charset="UTF-8" />
298
+
299
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
300
+
301
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
302
+
303
+
304
+
305
+ <!-- CSS -->
306
+
307
+ <link
308
+
309
+ href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css"
310
+
311
+ rel="stylesheet"
312
+
313
+ integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
314
+
315
+ crossorigin="anonymous"
316
+
317
+ />
318
+
319
+
320
+
321
+ <title>条件分岐の練習</title>
322
+
323
+ </head>
324
+
325
+ <body class="bg-light">
326
+
327
+ <div class="container w-100">
328
+
329
+ <h1 class="text-center text-info my-4">納期管理アプリ</h1>
330
+
331
+
332
+
333
+ <form id="all_radio">
334
+
335
+ <div class="responsibility">
336
+
337
+ <div class="form-check">
338
+
339
+ <input
340
+
341
+ class="form-check-input"
342
+
343
+ type="radio"
344
+
345
+ name="deadline"
346
+
347
+ id="t_t"
348
+
349
+ value="0"
350
+
351
+ checked
352
+
353
+ />
354
+
355
+ <label class="form-check-label" for="flexRadioDefault2">
356
+
357
+ 通常業務、通常配送
358
+
359
+ </label>
360
+
361
+ </div>
362
+
363
+ <div class="form-check">
364
+
365
+ <input
366
+
367
+ class="form-check-input"
368
+
369
+ type="radio"
370
+
371
+ name="deadline"
372
+
373
+ id="t_k"
374
+
375
+ value="1"
376
+
377
+ />
378
+
379
+ <label class="form-check-label" for="flexRadioDefault1">
380
+
381
+ 通常業務、緊急配送
382
+
383
+ </label>
384
+
385
+ </div>
386
+
387
+ </div>
388
+
389
+
390
+
391
+ <div class="deadline mt-3">
392
+
393
+ <div class="form-check">
394
+
395
+ <input
396
+
397
+ class="form-check-input"
398
+
399
+ type="radio"
400
+
401
+ name="deadline"
402
+
403
+ id="j_t"
404
+
405
+ value="2"
406
+
407
+ />
408
+
409
+ <label class="form-check-label" for="flexRadioDefault2">
410
+
411
+ 重要業務、通常配送
412
+
413
+ </label>
414
+
415
+ </div>
416
+
417
+ <div class="form-check">
418
+
419
+ <input
420
+
421
+ class="form-check-input"
422
+
423
+ type="radio"
424
+
425
+ name="deadline"
426
+
427
+ id="j_k"
428
+
429
+ value="3"
430
+
431
+ />
432
+
433
+ <label class="form-check-label" for="flexRadioDefault1">
434
+
435
+ 重要業務、緊急配送
436
+
437
+ </label>
438
+
439
+ </div>
440
+
441
+ </div>
442
+
443
+ </form>
444
+
445
+
446
+
447
+ <form id="form" class="mt-2 mb-5">
448
+
449
+ <input
450
+
451
+ id="input"
452
+
453
+ class="form-control"
454
+
455
+ placeholder="納期、送り先を入力"
456
+
457
+ autocomplete="off"
458
+
459
+ />
460
+
461
+ </form>
462
+
463
+
464
+
465
+ <div id="all_ul" class="f-container">
466
+
467
+ <ul class="list-group text-secondary" id="ul_3">
468
+
469
+ 重要、緊急
470
+
471
+ </ul>
472
+
473
+ <ul class="list-group text-secondary" id="ul_2">
474
+
475
+ 重要、通常
476
+
477
+ </ul>
478
+
479
+ <ul class="list-group text-secondary" id="ul_1">
480
+
481
+ 通常、緊急
482
+
483
+ </ul>
484
+
485
+ <ul class="list-group text-secondary" id="ul_0">
486
+
487
+ 通常、通常
488
+
489
+ </ul>
490
+
491
+ </div>
492
+
493
+ </div>
494
+
495
+
496
+
497
+ <!-- Resetボタン -->
498
+
499
+ <div class="d-grid gap-2 col-1 mx-auto pt-5">
500
+
501
+ <button id="Reset" class="btn btn-primary" type="button">Reset</button>
502
+
503
+ </div>
504
+
505
+
506
+
507
+ <script src="todo.js"></script>
508
+
509
+ </body>
510
+
511
+ </html>
44
512
 
45
513
 
46
514
 
@@ -48,476 +516,6 @@
48
516
 
49
517
 
50
518
 
51
- ### 該当のソースコード
52
-
53
-
54
-
55
- ```JavaScript
56
-
57
- const form = document.getElementById("form");
58
-
59
- const input = document.getElementById("input");
60
-
61
- const ul_0 = document.getElementById("ul_0");
62
-
63
- const ul_1 = document.getElementById("ul_1");
64
-
65
- const ul_2 = document.getElementById("ul_2");
66
-
67
- const ul_3 = document.getElementById("ul_3");
68
-
69
- const all_radio = document.getElementById("all_radio");
70
-
71
-
72
-
73
- // ローカルデータ読み込み
74
-
75
- let todos = JSON.parse(localStorage.getItem("todos"));
76
-
77
- if (todos) {
78
-
79
- // 配列の全要素に対して反復処理
80
-
81
- todos.forEach((todo) => {
82
-
83
- add(todo);
84
-
85
- });
86
-
87
- }
88
-
89
- // フォームがエンター(submit)された時処理
90
-
91
- form.addEventListener("submit", function (event) {
92
-
93
- // デフォルトのイベント中止(エンター後のリロード)
94
-
95
- event.preventDefault();
96
-
97
- // 下記の関数submit後に行いたい処理
98
-
99
- add();
100
-
101
- });
102
-
103
-
104
-
105
- function add(todo) {
106
-
107
- // フォームに入力された値を取る
108
-
109
- let todoText = input.value;
110
-
111
-
112
-
113
- if (todo) {
114
-
115
- todoText = todo.text;
116
-
117
- }
118
-
119
- // フォームが空の状態でのliタグの追加を防ぐ
120
-
121
- if (todoText.length > 0) {
122
-
123
- // liタグの作成
124
-
125
- const li = document.createElement("li");
126
-
127
- // liにフォームに入力された値を入れる
128
-
129
- li.innerText = todoText;
130
-
131
- // liタグにlist-group-itemクラスの追加、デザインの為
132
-
133
- li.classList.add("list-group-item");
134
-
135
-
136
-
137
- // ラジオボタンの選択された値
138
-
139
- let radioNodeList = all_radio.deadline;
140
-
141
- let radiobtn = radioNodeList.value;
142
-
143
-
144
-
145
- switch (radiobtn) {
146
-
147
- case "0":
148
-
149
- // ul_0の子要素として追加する
150
-
151
- ul_0.appendChild(li);
152
-
153
- // フォームを空にする
154
-
155
- input.value = "";
156
-
157
- // ローカルストレージに保存する
158
-
159
- saveDate();
160
-
161
- break;
162
-
163
- case "1":
164
-
165
- ul_1.appendChild(li);
166
-
167
- input.value = "";
168
-
169
- saveDate();
170
-
171
- break;
172
-
173
- case "2":
174
-
175
- ul_2.appendChild(li);
176
-
177
- input.value = "";
178
-
179
- saveDate();
180
-
181
- break;
182
-
183
- case "3":
184
-
185
- ul_3.appendChild(li);
186
-
187
- input.value = "";
188
-
189
- saveDate();
190
-
191
- }
192
-
193
-
194
-
195
- if (todo && todo.completed) {
196
-
197
- li.classList.add("text-decoration-line-through");
198
-
199
- }
200
-
201
-
202
-
203
- li.addEventListener("contextmenu", function (event) {
204
-
205
- // 右クリックイベントブロック
206
-
207
- event.preventDefault();
208
-
209
- li.remove();
210
-
211
- saveDate();
212
-
213
- });
214
-
215
-
216
-
217
- li.addEventListener("click", function () {
218
-
219
- li.classList.toggle("text-decoration-line-through");
220
-
221
- saveDate();
222
-
223
- });
224
-
225
- }
226
-
227
- }
228
-
229
- // li要素を取得して、配列としてまとめておく
230
-
231
- function saveDate() {
232
-
233
- const lists = document.querySelectorAll("li");
234
-
235
- // 空の配列を定義
236
-
237
- const todos = [];
238
-
239
-
240
-
241
- // 配列の全要素に対して反復処理
242
-
243
- lists.forEach((li) => {
244
-
245
- // todosの配列に追加していく処理
246
-
247
- todos.push({
248
-
249
- // 入力された値
250
-
251
- text: li.innerText,
252
-
253
- completed: li.classList.contains("text-decoration-line-through"),
254
-
255
- });
256
-
257
- });
258
-
259
- // jsonでローカルデータ保存
260
-
261
- localStorage.setItem("todos", JSON.stringify(todos));
262
-
263
- }
264
-
265
-
266
-
267
- // リセットボタン
268
-
269
- const Reset = document.getElementById("Reset");
270
-
271
-
272
-
273
- Reset.addEventListener("click", function () {
274
-
275
- // 子要素全消去
276
-
277
- all_ul.innerHTML = "";
278
-
279
- window.location.reload();
280
-
281
- saveDate();
282
-
283
- });
284
-
285
-
286
-
287
- ```
288
-
289
-
290
-
291
- ```HTML
292
-
293
- <!DOCTYPE html>
294
-
295
- <html lang="ja">
296
-
297
- <head>
298
-
299
- <meta charset="UTF-8" />
300
-
301
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
302
-
303
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
304
-
305
-
306
-
307
- <!-- CSS -->
308
-
309
- <link
310
-
311
- href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css"
312
-
313
- rel="stylesheet"
314
-
315
- integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
316
-
317
- crossorigin="anonymous"
318
-
319
- />
320
-
321
-
322
-
323
- <title>条件分岐の練習</title>
324
-
325
- </head>
326
-
327
- <body class="bg-light">
328
-
329
- <div class="container w-100">
330
-
331
- <h1 class="text-center text-info my-4">納期管理アプリ</h1>
332
-
333
-
334
-
335
- <form id="all_radio">
336
-
337
- <div class="responsibility">
338
-
339
- <div class="form-check">
340
-
341
- <input
342
-
343
- class="form-check-input"
344
-
345
- type="radio"
346
-
347
- name="deadline"
348
-
349
- id="t_t"
350
-
351
- value="0"
352
-
353
- checked
354
-
355
- />
356
-
357
- <label class="form-check-label" for="flexRadioDefault2">
358
-
359
- 通常業務、通常配送
360
-
361
- </label>
362
-
363
- </div>
364
-
365
- <div class="form-check">
366
-
367
- <input
368
-
369
- class="form-check-input"
370
-
371
- type="radio"
372
-
373
- name="deadline"
374
-
375
- id="t_k"
376
-
377
- value="1"
378
-
379
- />
380
-
381
- <label class="form-check-label" for="flexRadioDefault1">
382
-
383
- 通常業務、緊急配送
384
-
385
- </label>
386
-
387
- </div>
388
-
389
- </div>
390
-
391
-
392
-
393
- <div class="deadline mt-3">
394
-
395
- <div class="form-check">
396
-
397
- <input
398
-
399
- class="form-check-input"
400
-
401
- type="radio"
402
-
403
- name="deadline"
404
-
405
- id="j_t"
406
-
407
- value="2"
408
-
409
- />
410
-
411
- <label class="form-check-label" for="flexRadioDefault2">
412
-
413
- 重要業務、通常配送
414
-
415
- </label>
416
-
417
- </div>
418
-
419
- <div class="form-check">
420
-
421
- <input
422
-
423
- class="form-check-input"
424
-
425
- type="radio"
426
-
427
- name="deadline"
428
-
429
- id="j_k"
430
-
431
- value="3"
432
-
433
- />
434
-
435
- <label class="form-check-label" for="flexRadioDefault1">
436
-
437
- 重要業務、緊急配送
438
-
439
- </label>
440
-
441
- </div>
442
-
443
- </div>
444
-
445
- </form>
446
-
447
-
448
-
449
- <form id="form" class="mt-2 mb-5">
450
-
451
- <input
452
-
453
- id="input"
454
-
455
- class="form-control"
456
-
457
- placeholder="納期、送り先を入力"
458
-
459
- autocomplete="off"
460
-
461
- />
462
-
463
- </form>
464
-
465
-
466
-
467
- <div id="all_ul" class="f-container">
468
-
469
- <ul class="list-group text-secondary" id="ul_3">
470
-
471
- 重要、緊急
472
-
473
- </ul>
474
-
475
- <ul class="list-group text-secondary" id="ul_2">
476
-
477
- 重要、通常
478
-
479
- </ul>
480
-
481
- <ul class="list-group text-secondary" id="ul_1">
482
-
483
- 通常、緊急
484
-
485
- </ul>
486
-
487
- <ul class="list-group text-secondary" id="ul_0">
488
-
489
- 通常、通常
490
-
491
- </ul>
492
-
493
- </div>
494
-
495
- </div>
496
-
497
-
498
-
499
- <!-- Resetボタン -->
500
-
501
- <div class="d-grid gap-2 col-1 mx-auto pt-5">
502
-
503
- <button id="Reset" class="btn btn-primary" type="button">Reset</button>
504
-
505
- </div>
506
-
507
-
508
-
509
- <script src="todo.js"></script>
510
-
511
- </body>
512
-
513
- </html>
514
-
515
-
516
-
517
- ```
518
-
519
-
520
-
521
519
  ### 試したこと
522
520
 
523
521
 

1

前提・実現したいことの記入漏れを修正

2021/12/23 14:44

投稿

oil
oil

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ここに質問の内容を詳しく書いてください。
6
-
7
- (例)PHP(CakePHP)で●●なシステムを作っています。
8
-
9
- ■■な機能実装中に以下のエラメッセージ発生しました。
5
+ ブラウザリロドすると、振り分けた<li>タグ1っ箇所にまとまってしまうのを直した
10
6
 
11
7
 
12
8