TodoリストのID番号の振り分け機能
JavascriptでTodoリストを作成している初学者です。
ラジオボタンで表示を切り替えても、ID番号を振り直されないようにしたい。
また、表示切り替え中のとき、タスクを追加した際に、作業中の中に追加していきたい
発生している問題
ラジオボタンを押し、"作業中"、"完了"のボタンを押し、表示を切り替える際、ID番号が振り直され連番に戻ってしまいます。
完成させたい機能は、"すべて"で振り当てられているID番号を維持したまま、表示切り替えを行いたいです。
また、"作業中"、"完了"を選択しているときに、新しいタスクを追加すると1度すべて表示されてしまいます。
もう1度ラジオボタンを押さないと表示が正常にならないです
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="jp"> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>js</title> 7</head> 8 9<body> 10 11 12 <h1>ToDoリスト</h1> 13 <p> 14 <input type="radio" name="list" value="all" id="radioAll" onchange="change()">すべて 15 <input type="radio" name="list" value="work" id="radioWork" onchange="change()">作業中 16 <input type="radio" name="list" value="done" id="radioDone" onchange="change()">完了 17 </p> 18 19 <table> 20 <thead> 21 <th>ID</th> 22 <th>コメント</th> 23 <th>状態</th> 24 <th></th> 25 </thead> 26 <tbody id="todo-body"> 27 </tbody> 28 </table> 29 30 31 <h2>新規タスクの追加</h2> 32 <input id="text" type="text"> 33 <button id='btn'>追加</button> 34 35 <script src="js/main.js"></script> 36 37 38</body> 39 40</html> 41
JavaScript
1'usestrict' 2 3{ 4 const tableBody = document.getElementById('todo-body') 5 const text = document.getElementById('text'); 6 const todos = []; 7 8 9 document.querySelector('button').addEventListener('click', () => { 10 const workBtn = document.createElement('button'); 11 const tableIds = todos.length; 12 workBtn.textContent = '作業中' 13 const todo = {}; 14 todo.taskId = tableIds; 15 todo.tableComment = text.value; 16 todo.tableStatus = workBtn; 17 change(); 18 19 20 21 workBtn.addEventListener('click', () => { 22 if (workBtn.textContent === '作業中') { 23 workBtn.textContent = '完了' 24 } else { 25 workBtn.textContent = '作業中' 26 }; 27 return workBtn; 28 }) 29 30 31 createRemoveButton = (tableRecord) => { 32 const number = tableRecord.rowIndex - 1; 33 const removeBtn = document.createElement('button'); 34 removeBtn.textContent = '削除' 35 36 removeBtn.addEventListener('click', () => { 37 todos.splice(number, 1); 38 showTodos(); 39 }) 40 41 return removeBtn; 42 }; 43 44 if (todo) { 45 todos.push(todo); 46 text.value = ''; 47 showTodos(todos); 48 } 49 }); 50 51 52 53 const showTodos = (argTodos) => { 54 tableBody.textContent = ''; 55 argTodos.forEach((todo, number) => { 56 const tableRecord = document.createElement('tr'); 57 tableBody.appendChild(tableRecord); 58 const tableId = document.createElement('td'); 59 const comment = document.createElement('td'); 60 const status = document.createElement('td'); 61 const action = document.createElement('td'); 62 63 tableId.textContent = number; 64 comment.textContent = todo.tableComment; 65 const work = todo.tableStatus 66 tableRecord.appendChild(tableId); 67 tableRecord.appendChild(comment); 68 tableRecord.appendChild(status); 69 status.appendChild(work); 70 tableRecord.appendChild(action); 71 action.appendChild(createRemoveButton(tableRecord)); 72 73 }); 74 }; 75 76 77 function change() { 78 const radioAll = document.getElementById('radioAll'); 79 const radioWork = document.getElementById('radioWork'); 80 const radioDone = document.getElementById('radioDone'); 81 82 if (radioAll.checked) { 83 return showTodos(todos); 84 } else if (radioWork.checked) { 85 const todoWork = todos.filter((todo) => { 86 return todo.tableStatus.textContent === '作業中' 87 }) 88 return showTodos(todoWork); 89 } else if (radioDone.checked) { 90 const todoDone = todos.filter((todo) => { 91 return todo.tableStatus.textContent === '完了' 92 }) 93 return showTodos(todoDone); 94 } 95 } 96 97 98} 99 100
試したこと
document.querySelector('button').addEventListener('click', () => { const workBtn = document.createElement('button'); const tableIds = todos.length; workBtn.textContent = '作業中' const todo = {}; todo.taskId = tableIds; todo.tableComment = text.value; todo.tableStatus = workBtn; change();
表示切り替え中にタスク追加したときにすべて表示されてしまうことについては、ここにchange()を書くのかなと思い試したのですが、エラーも出ませんが、結果も変わりませんでした。
IDについては、lengthで表示すればいいのかなと考え色々試したのですが、うまくいかずforEachの中で書いて連番でとりあえず表示している状況です、、、
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/17 03:06
2021/06/17 04:34
2021/06/17 05:31
2021/06/17 05:56
2021/06/18 04:13 編集
2021/06/18 04:04
2021/06/18 04:14
2021/06/18 04:22
2021/06/18 04:29
2021/06/20 04:10