退会ユーザー
genoさんは、プログラムを作成するときに、 どのような方法で作りたい動作を実現しようか考えながらプログラミングしていますか?
さて、プログラムを直していきたいと思います。
const checkTasks = () => {
const workingTasks = document.querySelectorAll(".work");
const doneTasks = document.querySelectorAll(".finish");
〜〜略〜〜
}
checkTasksメソッドで表示/非表示を切り替えようとしていると思います。 workクラスがついているタスクを作業中 finishクラスがついているタスクを完了 としていますね。
次にworkクラス、finishクラスがどこで設定されているのか見てみます。
・・・
プログラムを見渡してみると、どこにもありません。 まず、ここが1つ目の原因ですね。
workクラス、finishクラスは、どこで設定すればよいのか考えてみます。
const checkTasks = () => {
〜〜略〜〜
if (option[1].checked) {
workingTasks.forEach((workingTasks) => {
workingTasks.style.display = "";
});
doneTasks.forEach((doneTasks) => {
doneTasks.style.display = "none";
});
〜〜略〜〜
}
}
workクラス、finishクラスがついているタグのdisplay状態を切り替えて、 表示したり非表示したりしようとしています。
タスクは、
<tr>
<td>ID</td>
<td>コメント</td>
<td>切り替えボタン</td>
<td>削除ボタン</td>
</tr>
という構成になっていると思います。
trタグにwork、finishクラスをつければ、表示/非表示が切り替えられると思います。
つまり、作業中のときは、
<tr class='work'>
<td>ID</td>
<td>コメント</td>
<td>切り替えボタン</td>
<td>削除ボタン</td>
</tr>
完了のときは、
<tr class='finish'>
<td>ID</td>
<td>コメント</td>
<td>切り替えボタン</td>
<td>削除ボタン</td>
</tr>
この修正するは、以下の3つが必要になります。
①タスクを追加したときに、workクラスを付与する。 ②「作業中」ボタンを押したときに、workクラスを削除する。finishクラスを追加する。 ③「完了」ボタンを押したときに、finishクラスを削除する。workクラスを追加する。
まず、①の修正です。
add.addEventListener("click", () => {
〜〜略〜〜
//テーブルに行を追加
list.appendChild(tr);
⭐️ //trタグにworkクラスを追加する
⭐️ tr.classList.add('work')
newtask.value = "";
});
次に②③の修正です。
workButton.addEventListener("click", () => {
⭐️ // クリックされたボタンがある親のtrタグを取得する
⭐️ const tr = workButton.closest('tr');
if (workButton.innerHTML === "作業中") {
workButton.innerHTML = "完了";
⭐️ tr.classList.add('finish');
⭐️ tr.classList.remove('work');
} else {
workButton.innerHTML = "作業中";
⭐️ tr.classList.add('work');
⭐️ tr.classList.remove('finish');
}
});
続く。