Mini Project: To-Do List Sederhana dengan JavaScript

By | 16 October 2025

To-Do List adalah aplikasi daftar tugas yang membantu kamu mencatat hal-hal yang perlu dilakukan. Untuk itu dalam tutorial kali ini kita akan membuat Mini Project: To-Do List Sederhana dengan JavaScript. Karena dengan JavaScript, kita bisa membuat versi sederhananya yang bisa:

  • Menambah tugas baru,

  • Menandai tugas yang sudah selesai,

  • Menghapus tugas, dan

  • Menyimpan data ke LocalStorage agar tetap ada meski halaman di-refresh.

Mini project ini cocok untuk pemula yang ingin melatih dasar DOM manipulation, event handling, dan penyimpanan lokal (LocalStorage) di browser.

1. Struktur Dasar HTML

Buat file index.html:

<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>To-Do List JavaScript</title>
  <style>
    body { font-family: Arial; max-width: 400px; margin: 50px auto; }
    h1 { text-align: center; }
    ul { list-style: none; padding: 0; }
    li { 
      padding: 8px; 
      margin: 5px 0; 
      background: #f0f0f0; 
      border-radius: 5px;
      display: flex; 
      justify-content: space-between;
      align-items: center;
    }
    li.done { text-decoration: line-through; color: gray; }
    button { margin-left: 10px; }
  </style>
</head>
<body>

  <h1> To-Do List</h1>

  <input type="text" id="taskInput" placeholder="Tulis tugas baru..." />
  <button id="addBtn">Tambah</button>

  <ul id="taskList"></ul>

  <script src="app.js"></script>
</body>
</html>

2. Logika Dasar JavaScript

Buat file app.js dan mulai dengan:

const input = document.getElementById("taskInput");
const addBtn = document.getElementById("addBtn");
const list = document.getElementById("taskList");

let tasks = JSON.parse(localStorage.getItem("tasks")) || [];

// Tampilkan tugas saat halaman dibuka
renderTasks();

3. Fungsi Tambah Tugas

addBtn.addEventListener("click", addTask);

function addTask() {
  const text = input.value.trim();
  if (text === "") return alert("Tugas tidak boleh kosong!");

  const newTask = { text, done: false };
  tasks.push(newTask);
  saveTasks();
  renderTasks();
  input.value = "";
}

Penjelasan:

  • Mengecek agar input tidak kosong,

  • Menambahkan tugas ke array tasks,

  • Menyimpan ke LocalStorage, dan

  • Menampilkan ulang daftar.

4. Menampilkan Daftar Tugas (renderTasks)

function renderTasks() {
  list.innerHTML = "";
  tasks.forEach((task, index) => {
    const li = document.createElement("li");
    li.textContent = task.text;

    if (task.done) li.classList.add("done");

    // Tombol centang & hapus
    const checkBtn = document.createElement("button");
    checkBtn.textContent = "✔️";
    checkBtn.addEventListener("click", () => toggleDone(index));

    const delBtn = document.createElement("button");
    delBtn.textContent = "❌";
    delBtn.addEventListener("click", () => deleteTask(index));

    li.append(checkBtn, delBtn);
    list.appendChild(li);
  });
}

5. Menandai & Menghapus Tugas

function toggleDone(index) {
  tasks[index].done = !tasks[index].done;
  saveTasks();
  renderTasks();
}

function deleteTask(index) {
  if (confirm("Yakin ingin menghapus tugas ini?")) {
    tasks.splice(index, 1);
    saveTasks();
    renderTasks();
  }
}

6. Menyimpan ke LocalStorage

function saveTasks() {
  localStorage.setItem("tasks", JSON.stringify(tasks));
}

Dengan LocalStorage, daftar tugas tetap tersimpan meskipun browser ditutup atau halaman di-refresh.

Studi Kasus Interaktif

Tambah beberapa tugas → muncul di daftar.
Klik tombol ✔️ → tugas berubah jadi garis coret.
Klik ❌ → tugas terhapus.
Refresh halaman → daftar masih ada (tersimpan di LocalStorage).

Kesimpulan

Mini project To-Do List JavaScript ini melatihmu untuk:

  • Mengelola DOM dan event listener,

  • Menggunakan array & object untuk menyimpan data,

  • Menerapkan LocalStorage untuk penyimpanan permanen.

Setelah ini, kamu bisa mengembangkan fitur seperti:

  • Edit tugas,

  • Filter tugas selesai / belum,

  • Sinkronisasi ke database dengan API.