6 Min

Einfache To‑Do‑App Schritt für Schritt (einfach erklärt)

Ein klarer Schritt-für-Schritt‑Leitfaden zum Erstellen einer kleinen To‑Do‑App: Funktionen planen, Bildschirme anlegen, Logik hinzufügen, Daten speichern, testen und veröffentlichen.

Einfache To‑Do‑App Schritt für Schritt (einfach erklärt)

Was wir bauen (und was du lernen wirst)

Wenn ich in diesem Leitfaden „App" sage, meine ich eine kleine Web-App: eine einzelne Seite, die du in einem Browser öffnest und die auf Klicks und Eingaben reagiert. Keine Installation, keine Accounts, kein großes Setup — nur ein einfaches Projekt, das du lokal ausführen kannst.

Ziel (was die fertige App können wird)

Am Ende hast du eine To‑Do‑App, die:

  • Aufgaben hinzufügt über ein Eingabefeld
  • Aufgaben als erledigt markiert (so siehst du, was abgeschlossen ist)
  • Aufgaben löscht, die du nicht mehr brauchst
  • Aufgaben nach dem Neuladen erhält mithilfe von localStorage (damit ein Tab‑Schließen nicht alles löscht)

Sie wird nicht perfekt oder „Enterprise‑tauglich“ sein — und das ist auch gut so. Das ist ein Anfängerprojekt, das die Grundlagen vermittelt, ohne auf viele Tools zurückzugreifen.

Was du lernen wirst (einfach erklärt)

Du baust die App Schritt für Schritt und lernst die Kernstücke, wie Front‑End Web‑Apps funktionieren:

  • HTML, um die Seitenstruktur zu erstellen (Eingabe, Knopf, Liste)
  • CSS, um die Oberfläche lesbar und angenehm zu machen
  • JavaScript, um Klicks zu verarbeiten, Listenelemente zu erzeugen und die Seite zu aktualisieren
  • localStorage, um Aufgaben zu speichern und wieder zu laden, damit sie erhalten bleiben
  • Grundlegendes Testen und Debuggen (kleine Fehler finden und beheben)

Was du brauchst, bevor wir starten

Halte es einfach. Du brauchst nur:

  • Einen Computer (Windows, Mac oder Linux)
  • Einen modernen Browser (Chrome, Firefox, Safari oder Edge)
  • Einen Code‑Editor (VS Code ist beliebt, aber jeder Editor funktioniert)

Wenn du einen Ordner anlegen und ein paar Dateien bearbeiten kannst, bist du startklar.

Schritt 1: Ziel und Funktionen der App festlegen

Bevor du eine Zeile Code schreibst, überlege, wie „Erfolg" aussieht. Dieses Tutorial baut eine kleine App mit einer klaren Aufgabe: dir helfen, Aufgaben zu verfolgen.

Wähle die eine Aufgabe der App

Schreibe ein Ein-Satz-Ziel, das du beim Bauen vor Augen halten kannst:

„Diese App lässt mich Aufgaben in eine Liste eintragen, damit ich sie nicht vergesse."

Das ist alles. Wenn du Lust bekommst, Kalender, Erinnerungen, Tags oder Accounts hinzuzufügen, schiebe diese Ideen auf später.

Muss‑Funktionen vs. nice‑to‑have

Mach zwei kurze Listen:

Muss‑Funktionen (für dieses Projekt):

  • Aufgabe hinzufügen (Text eingeben, Knopf klicken)
  • Aufgaben in einer Liste sehen
  • Aufgabe als erledigt markieren
  • Aufgabe löschen
  • Aufgaben nach dem Neuladen behalten (wir nutzen später localStorage)

Nice‑to‑have (heute nicht nötig): Fälligkeitsdaten, Prioritäten, Kategorien, Suche, Drag‑and‑Drop, Cloud‑Sync.

Wenn die „Muss‑Funktionen" klein bleiben, finishst du das Projekt eher.

Beschreibe den Bildschirm in einfachen Worten

Die App kann eine einzelne Seite haben mit:

  • Einem Texteingabefeld („Aufgabe hinzufügen…") und einem „Hinzufügen“-Knopf
  • Einer Aufgabenliste darunter
  • Jede Aufgabe hat einen „Erledigt“-Schalter und einen „Löschen“-Knopf

Definiere, was „erledigt" bedeutet

Sei konkret, damit du nicht hängen bleibst:

  • „Erledigt" = die Aufgabe sieht durchgestrichen (oder ausgegraut) aus und bleibt in der Liste, bis du sie löschst.

Wenn das klar ist, bist du bereit, die Projektdateien anzulegen.

Schritt 2: Projektdateien anlegen

Bevor wir Code schreiben, legen wir einen sauberen „Zuhause“-Ordner für die App an. Eine übersichtliche Struktur von Anfang an macht die nächsten Schritte leichter.

1) Projektordner erstellen

Erzeuge einen neuen Ordner auf deinem Rechner, z. B. todo-app. Dieser Ordner enthält alles für dieses Projekt.

Lege in diesem Ordner drei Dateien an:

  • index.html (Seitenstruktur)
  • styles.css (Aussehen und Layout)
  • app.js (Verhalten und Interaktivität)

Wenn dein Betriebssystem Dateiendungen versteckt, achte darauf, dass du echte Dateien erstellst. Ein häufiger Anfängerfehler ist index.html.txt.

2) Ordner im Editor und Browser öffnen

Öffne den todo-app-Ordner in deinem Editor (VS Code, Sublime Text etc.). Dann öffne index.html im Browser.

Deine Seite kann jetzt noch leer aussehen — das ist in Ordnung. Wir füllen sie im nächsten Schritt.

3) Wie du Änderungen siehst

Wenn du Dateien änderst, aktualisiert der Browser die Seite nicht automatisch (außer du nutzt ein Tool dafür).

Die einfache Schleife ist:

  1. Datei im Editor speichern
  2. Zum Browser wechseln
  3. Seite neu laden, um die Änderung zu sehen

Wenn etwas „nicht funktioniert", ist Neuladen der erste Schritt.

Optional: Einfachen lokalen Server nutzen (gut, aber nicht erforderlich)

Du kannst die App per Doppelklick auf index.html bauen, aber ein lokaler Server vermeidet später seltsame Probleme (besonders beim Speichern oder Laden von Dateien).

Einsteigerfreundliche Optionen:

  • In VS Code: Live Server installieren und „Go Live“ klicken
  • Falls Python installiert ist, im Ordner laufen lassen:
python -m http.server

Öffne dann die Adresse, die ausgegeben wird (oft http://localhost:8000) im Browser.

Schritt 3: Seitenstruktur bauen (HTML)

Jetzt erstellen wir ein sauberes Gerüst für die App. Dieses HTML macht noch nichts interaktiv (das kommt später), gibt aber JavaScript klare Stellen zum Lesen und Schreiben.

Minimales Layout, das wir brauchen

Enthalten sein sollten:

  • Ein Titel, damit die Seite auf einen Blick erkennbar ist
  • Ein Eingabefeld für den Aufgabentext
  • Ein Hinzufügen‑Knopf zum Abschicken einer Aufgabe
  • Ein Bereich, in dem neue Aufgaben erscheinen

Einfache, lesbare IDs/Klassen helfen später, weil dein JavaScript Elemente ohne Verwirrung auswählt.

Füge das in deine index.html ein

\u003c!doctype html\u003e
\u003chtml lang=\"en\"\u003e
  \u003chead\u003e
    \u003cmeta charset=\"utf-8\" /\u003e
    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e
    \u003ctitle\u003eTo‑Do App\u003c/title\u003e
    \u003clink rel=\"stylesheet\" href=\"styles.css\" /\u003e
  \u003c/head\u003e
  \u003cbody\u003e
    \u003cmain class=\"app\" id=\"app\"\u003e
      \u003ch1 class=\"app__title\" id=\"appTitle\"\u003eMy To‑Do List\u003c/h1\u003e

      \u003cform class=\"task-form\" id=\"taskForm\"\u003e
        \u003clabel class=\"task-form__label\" for=\"taskInput\"\u003eNew task\u003c/label\u003e
        \u003cdiv class=\"task-form__row\"\u003e
          \u003cinput
            id=\"taskInput\"
            class=\"task-form__input\"
            type=\"text\"
            placeholder=\"e.g., Buy milk\"
            autocomplete=\"off\"
          /\u003e
          \u003cbutton id=\"addButton\" class=\"task-form__button\" type=\"submit\"\u003e
            Add
          \u003c/button\u003e
        \u003c/div\u003e
      \u003c/form\u003e

      \u003cul class=\"task-list\" id=\"taskList\" aria-label=\"Task list\"\u003e\u003c/ul\u003e
    \u003c/main\u003e

    \u003cscript src=\"app.js\"\u003e\u003c/script\u003e
  \u003c/body\u003e
\u003c/html\u003e

Das war's fürs Gerüst. Beachte, dass wir id="taskInput" und id="taskList" verwendet haben — das sind die beiden Elemente, mit denen du am meisten in JavaScript arbeitest.

Schritt 4: Ein sauberes Aussehen (CSS)

Zurzeit existiert deine Seite, sieht aber vermutlich wie ein einfaches Dokument aus. Ein wenig CSS macht sie benutzerfreundlicher: klarere Abstände, gut lesbare Schrift und klickbare Knöpfe.

Beginne mit einem einfachen zentrierten Container

Ein zentriertes Kästchen hält die App fokussiert und verhindert, dass sich Inhalte über breite Bildschirme ausdehnen.

/* Basic page setup */
body {
  font-family: Arial, sans-serif;
  background: #f6f7fb;
  margin: 0;
  padding: 24px;
}

/* Centered app container */
.container {
  max-width: 520px;
  margin: 0 auto;
  background: #ffffff;
  padding: 16px;
  border-radius: 10px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
}

Aufgaben gut lesbar machen

Jede Aufgabe sollte wie eine eigene „Zeile" aussehen, mit angenehmem Abstand.

ul { list-style: none; padding: 0; margin: 16px 0 0; }

li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  border: 1px solid #e7e7ee;
  border-radius: 8px;
  margin-bottom: 10px;
}

.task-text { flex: 1; }

Deutliche Darstellung für „erledigt"

Wenn eine Aufgabe abgeschlossen ist, sollte sie sich optisch verändern, damit man das auf einen Blick erkennt.

.done .task-text {
  text-decoration: line-through;
  color: #777;
  opacity: 0.85;
}

Einheitliche Buttons

Halte Buttons in gleicher Größe und Stil, damit sie wie aus einer Hand wirken.

button {
  border: none;
  border-radius: 8px;
  padding: 8px 10px;
  cursor: pointer;
}

button:hover { filter: brightness(0.95); }

Das reicht für eine saubere, freundliche UI — keine fortgeschrittenen Tricks nötig. Als Nächstes verbinden wir das Verhalten mit JavaScript.

Schritt 5: Aufgaben hinzufügen (JavaScript‑Basics)

Teste eine Smartphone‑Version
Verwandle deine To‑Do‑Idee im selben Chat‑Workflow in eine Flutter‑Mobile‑App.

Jetzt, wo Eingabe, Knopf und Liste auf der Seite sind, bringen wir sie zum Leben. Ziel: Wenn jemand eine Aufgabe eingibt und Hinzufügen klickt (oder Enter drückt), erscheint ein neues Element in der Liste.

Button und Enter‑Taste verbinden

In deiner JavaScript‑Datei holst du zuerst die Elemente, dann hörst du auf zwei Aktionen: einen Klick auf den Knopf und die Enter‑Taste im Eingabefeld.

const taskInput = document.querySelector('#taskInput');
const addBtn = document.querySelector('#addBtn');
const taskList = document.querySelector('#taskList');

function addTask() {
  const text = taskInput.value.trim();

  // Block empty tasks (including ones that are just spaces)
  if (text === '') return;

  const li = document.createElement('li');
  li.textContent = text;
  taskList.appendChild(li);

  // Clear the input and put the cursor back
  taskInput.value = '';
  taskInput.focus();
}

addBtn.addEventListener('click', addTask);

taskInput.addEventListener('keydown', (event) => {
  if (event.key === 'Enter') {
    addTask();
  }
});

Was das in einfachen Worten macht

  • Liest den Text aus dem Eingabefeld und nutzt trim(), um Leerzeichen am Anfang/Ende zu entfernen.
  • Vermeidet das Hinzufügen leerer Aufgaben.
  • Erstellt ein neues <li>, setzt den Text und fügt es der Liste hinzu.
  • Setzt das Eingabefeld zurück und legt den Fokus zurück, damit das nächste Tippen schnell geht.

Wenn nichts passiert, prüfe, ob die IDs in HTML genau mit den Selektoren in JavaScript übereinstimmen — das ist einer der häufigsten Anfängerfehler.

Schritt 6: Erledigen markieren und Aufgaben löschen

Nachdem du Aufgaben hinzufügen kannst, machen wir sie interaktiv: du sollst Aufgaben als erledigt markieren und entfernen können.

Aufgaben als einfache Daten speichern

Statt Aufgaben bloß als Strings zu halten, speichere sie als Objekte. So hat jede Aufgabe eine stabile Identität und einen Platz für den „done"‑Status:

  • text: der Aufgabentext
  • done: true oder false
  • id: eine eindeutige Zahl, damit wir die richtige Aufgabe finden/löschen können

Zum Beispiel:

let tasks = [
  { id: 1, text: "Buy milk", done: false },
  { id: 2, text: "Email Sam", done: true }
];

Einen „Erledigt"‑Kontrollknopf und „Löschen"‑Knopf hinzufügen

Wenn du jede Aufgabe renderst, baue entweder ein Kontrollkästchen oder einen „Done"‑Knopf ein, plus einen „Delete"‑Knopf.

Ein Event Listener ist einfach „eine Art, auf Klicks zu reagieren". Am Anfängerfreundlichsten ist Event Delegation: Ein Klick‑Listener sitzt auf dem Container der Liste und prüft, was genau angeklickt wurde.

function toggleDone(id) {
  tasks = tasks.map(t => t.id === id ? { ...t, done: !t.done } : t);
  renderTasks();
}

function deleteTask(id) {
  tasks = tasks.filter(t => t.id !== id);
  renderTasks();
}

document.querySelector("#taskList").addEventListener("click", (e) => {
  const id = Number(e.target.dataset.id);
  if (e.target.matches(".toggle")) toggleDone(id);
  if (e.target.matches(".delete")) deleteTask(id);
});

In deiner renderTasks()‑Funktion:

  • Füge data-id="${task.id}" zu jedem Knopf hinzu.
  • Zeige erledigte Aufgaben optisch (z. B. durch Hinzufügen der Klasse .done).

Schritt 7: Aufgaben speichern, damit sie bleiben (localStorage)

Momentan hat deine To‑Do‑Liste ein nerviges Problem: Beim Neuladen der Seite (oder Schließen des Tabs) ist alles weg.

Das passiert, weil die Aufgaben nur im JavaScript‑Speicher existieren. Beim Neuladen wird dieser Speicher zurückgesetzt.

localStorage = eine kleine „Speicherbox" im Browser

localStorage ist im Browser eingebaut. Stell es dir als kleine Box vor, in der du Text unter einem Schlüssel ablegst. Ideal für Einsteigerprojekte, weil kein Server oder Account nötig ist.

Wir speichern die gesamte Aufgabenliste als JSON‑Text und laden sie beim Öffnen der Seite wieder.

1) Nach jeder Änderung speichern

Wann immer du eine Aufgabe hinzufügst, als erledigt markierst oder löschst, rufe saveTasks() auf.

const STORAGE_KEY = "todo.tasks";

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

Überall dort, wo du das tasks‑Array änderst, mach das direkt danach:

saveTasks(tasks);
renderTasks(tasks);

2) Beim Seitenstart laden und rendern

Beim Laden der Seite liest du den gespeicherten Wert. Wenn noch nichts gespeichert ist, fall zurück auf eine leere Liste.

function loadTasks() {
  const saved = localStorage.getItem(STORAGE_KEY);
  return saved ? JSON.parse(saved) : [];
}

let tasks = loadTasks();
renderTasks(tasks);

Fertig: Deine App merkt sich jetzt Aufgaben über Seiten‑Reloads hinweg.

Tipp: localStorage speichert nur Strings, daher wandelt JSON.stringify() das Array in Text und JSON.parse() macht aus dem Text wieder ein Array.

Schritt 8: Testen und häufige Bugs beheben

Plane die nächste Version
Lege Funktionen wie Bearbeiten, Filter und Fälligkeitsdaten fest, bevor du Code generierst.

Testen klingt langweilig, ist aber der schnellste Weg, aus „funktioniert bei mir" ein „funktioniert immer" zu machen. Mach nach jeder kleinen Änderung einen schnellen Testlauf.

Schneller Testlauf (60 Sekunden)

Führe die Hauptabläufe in dieser Reihenfolge durch:

  • Aufgabe hinzufügen
  • Als erledigt markieren
  • Löschen
  • Seite neu laden (um zu prüfen, ob UI und Speicherung korrekt sind)

Wenn ein Schritt fehlschlägt, behebe ihn, bevor du neue Features hinzufügst. Kleine Apps werden chaotisch, wenn Probleme sich stapeln.

Edge‑Cases, die Anfänger‑Apps oft brechen

Edge‑Cases sind Eingaben, mit denen du nicht gerechnet hast, die aber echte Nutzer machen werden:

  • Sehr langer Text (überläuft er oder schiebt Buttons aus dem Bildschirm?)
  • Gleiche Aufgaben mehrfach (löscht du die richtige?)
  • Leeres Eingabefeld (wird eine leere Aufgabe hinzugefügt?)

Ein häufiger Fix ist, leere Aufgaben zu blockieren:

const text = input.value.trim();
addButton.disabled = text === "";

(Das kannst du bei jedem input‑Event ausführen und nochmal kurz bevor du die Aufgabe hinzufügst.)

Schnell-Check: „nichts passiert"

Wenn Klicks nichts tun, liegt es meist an einem dieser Punkte:

  • Ein Selektor passt nicht (eine id oder Klassenname stimmt zwischen HTML und JS nicht überein).
  • Dein Script wird nicht geladen (falscher Dateiname/Pfad oder app.js nicht gefunden).
  • Ein JavaScript‑Fehler verhindert, dass der Rest der Datei läuft.

Die Konsole nutzen, um Ursachen zu finden

Wenn etwas seltsam wirkt, logg es:

console.log("Adding:", text);
console.log("Current tasks:", tasks);

Schau in die Entwicklerkonsole deines Browsers nach Fehlern (rote Meldungen). Entferne die Logs, sobald du das Problem behoben hast, damit dein Projekt nicht zugemüllt wird.

Schritt 9: Nutzerfreundlich gestalten (Accessibility + Mobil)

Eine To‑Do‑App ist erst „fertig", wenn sie für echte Menschen bequem nutzbar ist — auf dem Handy, per Tastatur und mit Hilfsmitteln wie Screenreadern.

Auf Mobil einfach zu tippen machen

Auf kleinen Bildschirmen sind winzige Knöpfe frustrierend. Gib klickbaren Elementen genug Platz:

  • Größere Polsterung für Knöpfe (etwa 44px Höhe anstreben)
  • Abstand zwischen Erledigt und Löschen‑Knopf, damit man nicht falsch tippt
  • Eingabefeld auf Mobil bildschirmbreit, damit Tippen angenehm ist

Im CSS helfen padding, größere font-size und gap oft am meisten.

Labels und ARIA (was und warum)

Screenreader brauchen klare Namen für Bedienelemente.

  • Dein Texteingabefeld sollte ein echtes \u003clabel\u003e haben (beste Option). Wenn du es nicht sichtbar zeigen willst, kannst du es per CSS verstecken, aber es muss im HTML bleiben.
  • Icon‑Buttons (z. B. Papierkorb) sollten aria-label="Aufgabe löschen" haben, damit Screenreader Kontexte liefern.

Das hilft Menschen zu verstehen, was jeder Knopf macht, ohne zu raten.

Tastaturunterstützung: Tab + Enter

Stell sicher, dass die gesamte App ohne Maus nutzbar ist:

  • Mit Tab solltest du zu Eingabe und Knöpfen gelangen.
  • Enter im Eingabefeld sollte die Aufgabe hinzufügen (ein \u003cform\u003e macht das natürlich möglich).
  • Nach dem Hinzufügen kannst du den Fokus zurück ins Eingabefeld setzen, damit mehrere Aufgaben schnell nacheinander erfasst werden können.

Lesbarkeit: Kontrast und Schriftgröße

Nutze eine gut lesbare Schriftgröße (16px ist ein guter Start) und starken Kontrast (dunkle Schrift auf hellem Hintergrund oder umgekehrt). Vermeide, Farbe allein zu verwenden, um „erledigt" anzuzeigen — kombiniere z. B. Durchstreichung plus einen optischen Zustand.

Schritt 10: Code aufräumen und organisieren

Veröffentlichen ohne Einrichtungsaufwand
Hoste deine App bei Koder.ai, wenn du sie öffentlich teilen willst.

Wenn alles funktioniert, nimm dir 10–15 Minuten Zeit zum Aufräumen. Das macht spätere Änderungen leichter und hilft dir, das Projekt beim nächsten Mal schneller zu verstehen.

Einfache Ordnerstruktur

Klein und vorhersehbar:

  • /index.html — Seitenstruktur (Eingabe, Knopf, Liste)
  • /styles.css — Aussehen (Abstände, Schrift, „erledigt"‑Stil)
  • /app.js — Verhalten (hinzufügen, umschalten, löschen, speichern/laden)
  • /README.md — kurze Notizen für das „zukünftige Ich"

Wenn du Unterordner magst, geht auch:

  • /css/styles.css
  • /js/app.js

Achte darauf, dass \u003clink\u003e und \u003cscript\u003e Pfade übereinstimmen.

JavaScript lesbarer machen

Ein paar schnelle Verbesserungen:

  • Klare Namen: taskInput, taskList, saveTasks()
  • Kleine Funktionen: eine Funktion sollte eine Aufgabe haben
  • Kurze Kommentare nur dort, wo der Code nicht selbsterklärend ist

Beispiel, das leichter zu überfliegen ist:

  • renderTasks(tasks)
  • addTask(text)
  • toggleTask(id)
  • deleteTask(id)

Kleines README hinzufügen

Dein README.md kann simpel sein:

  • Was es macht (eine To‑Do‑Liste, die Aufgaben speichert)
  • Wie man es startet (öffne index.html im Browser)
  • Optional: bekannte Einschränkungen

Projekt sichern

Mindestens: Erstelle eine ZIP‑Kopie, nachdem du einen Meilenstein erreicht hast (z. B. „localStorage funktioniert"). Für Versionierung ist Git ideal, aber optional. Eine einzige Sicherung kann vor versehentlichem Löschen retten.

Schritt 11: App veröffentlichen und teilen

Veröffentlichen heißt einfach, die Dateien (HTML, CSS, JavaScript) öffentlich online zu stellen, sodass andere einen Link öffnen und die App nutzen können. Da diese To‑Do‑App eine statische Seite ist (läuft im Browser, kein Server nötig), kannst du sie kostenlos hosten.

Option 1: GitHub Pages (gut für statische Sites)

Kurzfassung:

  1. GitHub‑Account erstellen (falls du noch keinen hast).
  2. Neues Repository anlegen und Dateien hochladen (oder per Git pushen).
  3. In den Repo‑Einstellungen zu Settings → Pages gehen.
  4. Branch (z. B. main) und Ordner (root /) wählen.
  5. Speichern — GitHub liefert eine öffentliche URL.

Wenn du separate Dateien nutzt, prüfe Dateinamen genau (styles.css vs style.css).

Option 2: Netlify oder Vercel (einfach per Drag & Drop)

Einfacher „upload and go"‑Weg:

  1. Account bei Netlify oder Vercel anlegen.
  2. Deploy / Add New Project wählen.
  3. Ordner per Drag & Drop hochladen oder GitHub verbinden.
  4. Auf Build/Upload warten.
  5. Die generierte URL öffnen und testen.
  • Seite neu laden: Aufgaben sollten noch da sein (localStorage funktioniert).
  • Aufgaben hinzufügen, abschließen und löschen: Keine kaputten Buttons.
  • Auf Mobil testen (oder Browserfenster schmal stellen): Nichts überlappt.

Wenn alles passt, schick den Link an einen Freundin — frische Augen finden oft Probleme schnell.

Nächste Schritte: Leichte Erweiterungen

Du hast eine funktionierende To‑Do‑App gebaut. Wenn du weiterlernen willst, ohne gleich ein riesiges Projekt zu starten, sind diese Erweiterungen sinnvoll und lehren nützliche Muster.

1) Aufgabentext bearbeiten

Füge einen „Bearbeiten"‑Knopf neben jede Aufgabe. Beim Klicken tauschst du das Label gegen ein kleines Eingabefeld (mit vorgefülltem Text) und zeigst „Speichern" und „Abbrechen" an.

Tipp: Behalte deine Aufgaben als Array von Objekten (mit id und text). Beim Bearbeiten: finde das richtige Objekt per id, aktualisiere text, re‑rendern und speichern.

2) Filter: Alle / Aktiv / Erledigt

Drei Knöpfe oben: Alle, Aktiv, Erledigt.

Speichere den aktuellen Filter z. B. in currentFilter = 'all'. Beim Rendern zeigst du:

  • all: alle Aufgaben
  • active: Aufgaben, die nicht erledigt sind
  • done: erledigte Aufgaben

3) Fälligkeitsdaten oder einfache Kategorien

Leicht gehalten:

  • Optionales Fälligkeitsdatum (YYYY-MM-DD) neben der Aufgabe anzeigen
  • Oder eine Kategorie wie „Arbeit / Zuhause / Schule" per Dropdown

Schon ein Feld mehr zeigt, wie du Datenmodell und UI zusammen erweiterst.

4) Später: von localStorage zu einem einfachen Backend wechseln

Der große Schritt: statt in localStorage zu speichern, sendest du Aufgaben an eine API (Server) per fetch(). Der Server legt sie in einer Datenbank ab, sodass Aufgaben über Geräte hinweg synchronisieren.

Wenn du diesen Sprung machen willst, ohne alles neu zu bauen, helfen Prototyping‑Tools und Plattformen, die Backend/Frontend‑Scaffolding generieren.

5) Gutes nächstes Anfängerprojekt

Baue eine Notizen‑App (mit Suche) oder einen Habit Tracker (tägliche Einträge). Beide nutzen die gleichen Fertigkeiten: Listendarstellung, Bearbeiten, Speichern und einfaches UI‑Design.

FAQ

Was brauche ich, um diese To-do-App zu erstellen?

Sie brauchen nur einen Computer, einen modernen Browser und einen Code-Editor. Erstellen Sie einen Ordner mit index.html, styles.css und app.js und öffnen Sie dann die HTML-Datei in Ihrem Browser.

Welche Funktionen sollte eine To-do-App für Einsteiger enthalten?

Beginnen Sie mit vier Aktionen: eine Aufgabe hinzufügen, sie in einer Liste anzeigen, als erledigt markieren und löschen. Zusätzliche Funktionen wie Fälligkeitsdaten, Kategorien und Konten können Sie später ergänzen.

Welche Aufgabe hat jede Datei im Projekt?

HTML erstellt das Eingabefeld, die Schaltfläche und die Aufgabenliste. CSS steuert Abstände und Aussehen. JavaScript verarbeitet Nutzeraktionen, aktualisiert die Liste und speichert Aufgabendaten.

Wie verhindere ich, dass leere Aufgaben hinzugefügt werden?

Verwenden Sie ein Formular mit einem Texteingabefeld und einer Senden-Schaltfläche. JavaScript sollte den Eingabewert bereinigen, ein leeres Ergebnis ablehnen, einen Listeneintrag erstellen und anschließend das Eingabefeld leeren und fokussieren.

Warum sollten Aufgaben Objekte statt einfachen Text verwenden?

Verwenden Sie Aufgabenobjekte mit den Werten id, text und done. Mit der ID kann Ihr Code genau die richtige Aufgabe aktualisieren oder entfernen, auch wenn zwei Aufgaben denselben Text haben.

Wie markiere ich eine Aufgabe als erledigt?

Fügen Sie für jede Aufgabe ein Kontrollkästchen oder eine Erledigt-Schaltfläche hinzu. Wenn jemand darauf klickt, ändern Sie den Wert done dieser Aufgabe und fügen eine CSS-Klasse hinzu, die den Text durchstreicht oder verblasst darstellt.

Wie kann sich die App Aufgaben nach dem Aktualisieren merken?

Speichern Sie das Aufgaben-Array mit JSON.stringify() unter einem localStorage-Namen und lesen Sie es beim Start der Seite mit JSON.parse() aus. Speichern Sie erneut, nachdem Sie eine Aufgabe hinzugefügt, erledigt, bearbeitet oder gelöscht haben.

Warum passiert nichts, wenn ich auf die Hinzufügen-Schaltfläche klicke?

Aktualisieren Sie zuerst die Seite und öffnen Sie die Browser-Konsole, um rote Fehlermeldungen zu prüfen. Kontrollieren Sie dann, ob Ihre HTML-IDs mit den JavaScript-Selektoren übereinstimmen und der Skriptdateiname dem Pfad in index.html entspricht.

Wie mache ich die App auf Smartphones und mit der Tastatur einfacher nutzbar?

Verwenden Sie eine echte Beschriftung für das Aufgabeneingabefeld, machen Sie die Bedienelemente groß genug zum Antippen und testen Sie die App mit Tab und Enter. Erledigte Aufgaben sollten nicht allein durch Farbe erkennbar sein, sondern zum Beispiel durch Durchstreichen und gut lesbaren Text.

Was sollte ich vor der Veröffentlichung meiner To-do-App testen?

Testen Sie das Hinzufügen einer Aufgabe, das Markieren als erledigt, das Löschen und das Aktualisieren der Seite. Probieren Sie außerdem leere Eingaben, lange Aufgabennamen und doppelte Aufgabentexte aus, bevor Sie die App teilen.

Related posts