288

Web & Frontend · JavaScript im Web

Programmiertechniken im Webfrontend einsetzen

Du lernst, Webseiten mit JavaScript lebendig zu machen: auf Klicks und Eingaben reagieren, Inhalte verändern und Daten nachladen.

Fortgeschritten Fortgeschritten ca. 30 Std. SelbststudiumMediamatik: 2. Lehrjahr · Berufsfachschule
#JavaScript#DOM#Events#Funktionen#Arrays#JSON#fetch#Debugging#Interaktivität

Überblick

Worum geht es?

Bisher waren deine Seiten statisch. Jetzt bringst du Logik in den Browser. Du lernst die Grundbausteine des Programmierens mit JavaScript kennen: Variablen, Bedingungen, Schleifen, Arrays, Objekte und Funktionen. Damit greifst du auf Elemente der Seite zu, reagierst auf Klicks und Eingaben und baust typische Interaktionen wie Galerien, Filter oder Rechner. Zum Schluss lädst du Daten aus JSON-Dateien und zeigst sie dynamisch an. Fehler findest du systematisch mit den Browser-Entwicklertools.

Wofür brauchst du das?

Akkordeons, Bildergalerien, Preisrechner, Filter für Veranstaltungen: Solche Funktionen erwarten Kundinnen und Kunden heute auf jeder Website. Als Mediamatikerin oder Mediamatiker setzt du sie selbst um oder passt bestehende Skripte in einem CMS an. Das Verständnis für Programmierlogik hilft dir ausserdem in 307 (Formulare), 291 (UIs) und bei der Arbeit mit Entwicklern.

Das solltest du schon können

  • Eine Website mit semantischem HTML aufbauen und veröffentlichen (Modul 101)
  • Layouts mit CSS, Klassen und Flexbox gestalten (Modul 287)
  • Logisch in Schritten denken, z.B. einen Ablauf als Liste von Anweisungen aufschreiben

Typische Tools & Technologien

JavaScript (ES6+)HTML5 / CSS3Visual Studio CodeLive Server (VS Code)Chrome / Firefox DevToolsJSONGit / GitHub (optional)

Lernziele

Was musst du können?

Das sind die Fähigkeiten, die am Ende des Moduls sitzen sollten. Jedes Ziel mit einem Beispiel aus dem Lehrbetrieb.

  1. 1

    Variablen, Datentypen, Bedingungen und Schleifen in JavaScript einsetzen

    Kompetenz A

    Du speicherst Werte in Variablen mit let und const, unterscheidest Zahlen, Texte, Wahrheitswerte, Arrays und Objekte und steuerst den Ablauf mit if und Schleifen. So kannst du einfache Regeln in Code übersetzen.

    Situation

    Eine Druckerei in Luzern möchte auf ihrer Website einen Preisrechner für Flyer: CHF 0.18 pro Stück, ab 1000 Stück 15 % Rabatt, ab 5000 Stück 25 %.

    Deine Aufgabe

    Schreibe die Logik, die aus der Auflage den Preis berechnet.

    Gutes Ergebnis

    const STUECKPREIS = 0.18; eine Variable 'rabatt' wird mit if/else if je nach Auflage auf 0, 0.15 oder 0.25 gesetzt. Für 2000 Stück ergibt das CHF 306.00, ausgegeben mit toFixed(2).

    let / constDatentypenif / elsefor / for...ofArrayObjekt
  2. 2

    Code mit Funktionen strukturieren und wiederverwenden

    Kompetenz A

    Du verpackst wiederkehrende Abläufe in Funktionen mit Parametern und Rückgabewerten. Funktionen haben sprechende Namen und erledigen genau eine Aufgabe.

    Situation

    Der Preisrechner braucht dieselbe Rechnung für Flyer A6, A5 und A4, nur mit anderen Stückpreisen.

    Deine Aufgabe

    Mach aus der Berechnung eine wiederverwendbare Funktion.

    Gutes Ergebnis

    'function berechnePreis(auflage, stueckpreis) { ... return total; }'. Eine zweite Funktion 'formatiereCHF(betrag)' liefert den Text 'CHF 306.00'. Beide werden für alle Formate aufgerufen.

    FunktionParameterRückgabewertArrow FunctionGültigkeitsbereich (Scope)
  3. 3

    Elemente im DOM finden, auslesen und verändern

    Kompetenz B

    Du greifst mit querySelector auf HTML-Elemente zu, änderst Texte und Attribute, schaltest CSS-Klassen um und erzeugst neue Elemente. Gestaltung bleibt im CSS, JavaScript wechselt nur Klassen.

    Situation

    Auf der Website eines Kinos soll bei ausverkauften Vorstellungen der Button grau werden und 'Ausverkauft' anzeigen.

    Deine Aufgabe

    Passe die Buttons per JavaScript an, wenn eine Vorstellung keine freien Plätze mehr hat.

    Gutes Ergebnis

    Alle Vorstellungen werden mit querySelectorAll geholt. Ist data-plaetze gleich 0, bekommt der Button die Klasse 'is-sold-out', den Text 'Ausverkauft' und das Attribut disabled.

    DOMquerySelector / querySelectorAlltextContentclassListdata-AttributecreateElement
  4. 4

    Auf Klicks, Eingaben und andere Benutzeraktionen mit Events reagieren

    Kompetenz C

    Du registrierst Event-Listener für Klicks, Tastatur, Eingaben oder das Absenden von Formularen. Du kennst das Event-Objekt und weisst, wann du das Standardverhalten verhinderst.

    Situation

    Die FAQ-Seite einer Gemeinde hat 30 Fragen, die alle offen untereinander stehen. Niemand findet etwas.

    Deine Aufgabe

    Baue ein Akkordeon: Klick auf eine Frage öffnet die Antwort, die anderen schliessen sich.

    Gutes Ergebnis

    Ein einziger Listener auf der Liste (Event Delegation) prüft, ob ein Fragebutton geklickt wurde, setzt aria-expanded und schaltet die Klasse 'is-open'. Auch mit Tastatur bedienbar, weil die Fragen echte button-Elemente sind.

    addEventListenerclick / input / submit / keydownEvent-ObjektpreventDefaultEvent Delegation
  5. 5

    Daten aus JSON-Dateien oder APIs laden und dynamisch anzeigen

    Kompetenz D

    Du lädst Daten mit fetch und async/await, wandelst sie in JavaScript-Objekte um und erzeugst daraus HTML. Du rechnest damit, dass ein Laden fehlschlagen kann, und zeigst dann eine verständliche Meldung.

    Situation

    Ein Jugendhaus in Biel pflegt seine Veranstaltungen in einer Datei events.json und möchte sie auf der Website als Liste mit Filter nach Kategorie zeigen.

    Deine Aufgabe

    Lade die Events und zeige sie nach Datum sortiert an.

    Gutes Ergebnis

    Eine async-Funktion lädt 'events.json' mit await fetch() und res.json() in einem try/catch-Block. Die Events werden mit sort() nach Datum geordnet, mit filter() nach Kategorie gefiltert und mit map() als Karten gerendert. Bei einem Fehler erscheint 'Die Agenda konnte nicht geladen werden.'

    JSONfetchasync / awaittry / catchmap / filter / sortTemplate Literals
  6. 6

    Fehler mit den Browser-Entwicklertools systematisch finden

    Kompetenz E

    Du liest Fehlermeldungen in der Konsole, setzt console.log gezielt ein, arbeitest mit Breakpoints und prüfst im Network-Tab, ob Dateien geladen werden. Du gehst dabei Schritt für Schritt vor statt zu raten.

    Situation

    Die Agenda des Jugendhauses bleibt leer, in der Konsole steht 'Uncaught TypeError: Cannot read properties of undefined (reading 'map')'.

    Deine Aufgabe

    Finde die Ursache.

    Gutes Ergebnis

    Im Network-Tab ist events.json korrekt geladen. Ein Breakpoint zeigt: Die Daten liegen unter 'data.events', der Code greift aber auf 'data.items' zu. Nach der Korrektur erscheinen alle 14 Events.

    KonsoleFehlermeldung lesenBreakpointNetwork-Tabconsole.log

Selbsteinschätzung

Wo stehst du?

Die Kompetenzmatrix zerlegt das Modul in Themenstränge und drei Stufen. Für den Kompetenznachweis solltest du überall mindestens Stufe 2 erreichen. Dein Stand bleibt in diesem Browser gespeichert und färbt Lernweg und Übungen ein.

Tippe auf eine Aussage, um deinen Stand zu setzen: offen unsicher sitzt
A

Grundbausteine und Funktionen

Ziel 1Ziel 2

Grundlagen

Fortgeschritten

Erweitert

B

Die Seite verändern

Ziel 3

Grundlagen

Fortgeschritten

Erweitert

C

Auf Events reagieren

Ziel 4

Grundlagen

Fortgeschritten

Erweitert

D

Daten laden

Ziel 5

Grundlagen

Fortgeschritten

Erweitert

E

Fehler finden

Ziel 6

Grundlagen

Fortgeschritten

Erweitert

Praxisfall

Der Ausflugsfinder von Seenland Tourismus

Ilaria ist im 2. Lehrjahr als Mediamatikerin bei der Seenland Tourismus AG in Murten, einer Tourismusorganisation mit 25 Mitarbeitenden. Die Website zeigt Ausflüge bisher als lange statische Liste, die das Marketing mühsam von Hand pflegt. Ilaria soll mit JavaScript einen Ausflugsfinder mit Filter und einen Preisrechner für Gruppen bauen.

  1. Kapitel 1

    Der Gruppenpreis-Rechner

    Für die Schifffahrt mit Fondue gelten CHF 59 pro erwachsene Person, Kinder zahlen die Hälfte, und ab 15 Personen gibt es 10 Prozent Rabatt. Ilaria schreibt zuerst alles in einen einzigen langen Block und verliert schnell den Überblick. Sie teilt den Code in die Funktionen berechnePreis, rundeAuf5Rappen und formatiereCHF auf. Als 0.1 plus 0.2 in der Konsole nicht genau 0.3 ergibt, rechnet sie intern in Rappen und wandelt erst bei der Ausgabe um.

    Ziel 1Ziel 2

  2. Kapitel 2

    Ausflugskarten aus Daten

    Statt 30 Ausflüge von Hand in HTML zu kopieren, legt Ilaria sie als Array von Objekten an und erzeugt die Karten per Skript. Ausgebuchte Ausflüge erhalten über classList eine eigene Klasse, die sie grau darstellt. Ein Titel mit dem Zeichen & und spitzen Klammern zerschiesst die Darstellung, weil sie innerHTML verwendet. Sie baut die Karten deshalb mit createElement und textContent auf.

    Ziel 3

  3. Kapitel 3

    Filtern mit einem Klick

    Ilaria ergänzt Filterbuttons für Wandern, Wasser, Kulinarik und Familie und hängt nur einen einzigen Listener an die Buttonleiste. Dazu baut sie ein Burger-Menü für die mobile Ansicht. Eine Kollegin testet nur mit der Tastatur und kommt gar nicht ins Menü, weil das Burger-Symbol ein div ist. Ilaria ersetzt es durch einen echten button, der seinen Zustand mit aria-expanded mitteilt.

    Ziel 4

  4. Kapitel 4

    Daten aus der JSON-Datei

    Damit das Marketing die Ausflüge selbst pflegen kann, lagert Ilaria sie in die Datei ausfluege.json aus und lädt sie mit fetch. Die Ausflüge sortiert sie nach Datum und formatiert dieses mit toLocaleDateString für die Schweiz. Während des Ladens erscheint ein Hinweis, und für Einträge ohne Bild zeigt sie ein Platzhalterbild. Fehlt die Datei ganz, sehen Besuchende eine freundliche Meldung statt einer leeren Seite.

    Ziel 5

  5. Kapitel 5

    Am Montag ist alles leer

    Nach einem Update durch das Marketing zeigt der Ausflugsfinder am Montagmorgen keinen einzigen Ausflug. Im Network-Tab ist die Datei mit Status 200 geladen, die Konsole meldet aber einen SyntaxError, weil in Zeile 214 ein Komma fehlt. Nach der Korrektur findet der Filter Wasser trotzdem nichts, und ein Breakpoint zeigt, dass die Kategorie als "wasser " mit Leerzeichen erfasst wurde. Ilaria bereinigt die Werte mit trim() und schreibt für das Marketing eine kurze Anleitung, wie man die JSON-Datei vor dem Hochladen prüft.

    Ziel 6

Lernweg

Wie lernst du das?

  1. 1

    Erste Schritte mit JavaScript

    ca. 5 Std.

    Du lernst die Grundbausteine in der Browser-Konsole und in einer eigenen Skriptdatei kennen.

    • Ein Skript per script-Tag mit defer einbinden und 'Hallo' in die Konsole schreiben
    • Kleine Rechnungen mit Variablen lösen, z.B. MWST 8.1 % auf einen Betrag
    • Mit Schleifen eine Liste von Produkten aus einem Array ausgeben

    Trainiert Kompetenz A1

    Lernziel1

  2. 2

    Funktionen und saubere Struktur

    ca. 4 Std.

    Du gliederst deinen Code in kleine Funktionen mit klaren Namen.

    • Den MWST-Rechner in Funktionen aufteilen
    • Dieselbe Funktion einmal klassisch und einmal als Arrow Function schreiben
    • Den eigenen Code einer Kollegin erklären, ohne den Bildschirm zu zeigen

    Trainiert Kompetenz A2

    Lernziel2

  3. 3

    Die Seite verändern

    ca. 5 Std.

    Du verbindest JavaScript mit HTML und CSS und baust erste sichtbare Effekte.

    • Texte, Bilder und Klassen eines Elements per Skript ändern
    • Eine Produktliste aus einem Array von Objekten als HTML erzeugen
    • Mit Klassen statt Inline-Styles zwischen Zuständen wechseln

    Trainiert Kompetenz B1B2

    Lernziel3

  4. 4

    Interaktion mit Events

    ca. 6 Std.

    Du reagierst auf Aktionen der Besuchenden und baust typische Komponenten.

    • Mobile Navigation mit Burger-Button umsetzen
    • Ein FAQ-Akkordeon mit Event Delegation bauen
    • Einen Live-Preisrechner bauen, der bei jeder Eingabe neu rechnet

    Trainiert Kompetenz C1C2B2

    Lernziel43

  5. 5

    Daten laden und Fehler finden

    ca. 6 Std.

    Du holst Daten aus JSON und lernst, Fehler mit den DevTools systematisch zu finden.

    • Eine events.json anlegen, mit fetch laden und als Karten anzeigen
    • Filter- und Sortierbuttons ergänzen
    • Absichtlich drei Fehler einbauen und mit Konsole, Breakpoints und Network-Tab finden

    Trainiert Kompetenz D1D2E1E2

    Lernziel56

  6. 6

    Mini-Projekt

    ca. 4 Std.

    Du setzt eine interaktive Seite von A bis Z um, wie im Kompetenznachweis.

    • Anforderungen lesen und den Ablauf in Pseudocode skizzieren
    • Umsetzen, testen und mit Kommentaren dokumentieren
    • Die Lösung in 5 Minuten präsentieren

    Trainiert Kompetenz A2A3C2D2

    Lernziel1245

Üben

Übungen aus der Praxis

MWST-Rechner für Offerten

Einstieg Einstieg

Eine Agentur möchte auf ihrer Intranetseite einen kleinen Rechner, der aus einem Nettobetrag die MWST von 8.1 % und den Bruttobetrag berechnet.

Weist nach A1A2C1

  1. Ein Eingabefeld und einen Ausgabebereich im HTML anlegen
  2. Eine Funktion schreiben, die Netto in MWST und Brutto umrechnet
  3. Bei jeder Eingabe das Ergebnis neu anzeigen und auf 5 Rappen runden
Tipp anzeigen

Auf 5 Rappen rundest du, indem du den Betrag mal 20 nimmst, rundest und wieder durch 20 teilst.

Lösungsskizze anzeigen

Funktion 'berechneMwst(netto)' gibt ein Objekt mit mwst und brutto zurück. Ein input-Listener liest den Wert mit Number(), ruft die Funktion auf und schreibt die Ergebnisse mit toFixed(2) und 'CHF' in die Seite. Leere oder negative Eingaben zeigen einen Hinweis.

Portfolio-Galerie mit Filter

Fortgeschritten Fortgeschritten

Ein Fotograf zeigt 24 Bilder in den Kategorien Hochzeit, Business und Natur. Besuchende sollen nach Kategorie filtern und ein Bild gross öffnen können.

Weist nach B2C2

  1. Die Bilder mit data-kategorie im HTML auszeichnen
  2. Filterbuttons bauen, die Bilder ein- und ausblenden
  3. Ein Lightbox-Overlay mit Schliessen-Button und Escape-Taste umsetzen
  4. Den aktiven Filter optisch und mit aria-pressed markieren
Tipp anzeigen

Statt jedem Bild einen eigenen Listener zu geben, reicht ein Listener auf dem Galerie-Container.

Lösungsskizze anzeigen

Filter setzen auf allen Bildern die Klasse 'is-hidden', wenn die Kategorie nicht passt. Klick auf ein Bild öffnet ein Overlay mit dem grossen Bild aus data-gross. keydown-Listener schliesst bei 'Escape'. Der aktive Filterbutton bekommt aria-pressed='true'.

Veranstaltungsagenda aus JSON

Anspruchsvoll Anspruchsvoll

Ein Kulturverein in Solothurn pflegt seine 40 Veranstaltungen pro Saison in einer JSON-Datei. Die Website soll kommende Events anzeigen, nach Sparte filtern und vergangene Events automatisch ausblenden.

Weist nach A3D3E3

  1. Ein sinnvolles JSON-Format für Events festlegen (Titel, Datum, Ort, Sparte, Preis in CHF)
  2. Die Daten mit fetch laden und Fehler abfangen
  3. Vergangene Events herausfiltern und nach Datum sortieren
  4. Filterbuttons pro Sparte ergänzen
  5. Mit den DevTools prüfen, was bei fehlender Datei oder falschem Datumsformat passiert
Tipp anzeigen

Speichere Daten im JSON im Format 'JJJJ-MM-TT'. Das lässt sich zuverlässig mit new Date() vergleichen und sortieren.

Lösungsskizze anzeigen

async-Funktion 'ladeEvents()' mit try/catch. Danach filter() mit 'e.datum >= heuteIso (ISO-Datumstexte JJJJ-MM-TT direkt vergleichen, sonst fallen heutige Events wegen der Uhrzeit heraus)', sort() nach Datum, map() zu HTML-Karten mit Template Literals. Datum wird mit toLocaleDateString('de-CH') angezeigt. Bei Fehler erscheint eine Meldung statt einer leeren Seite.

Selbstcheck

Kannst du das beantworten?

Was ist der Unterschied zwischen let und const?

Eine mit const deklarierte Variable kann nicht neu zugewiesen werden, let schon. Standardmässig nimmst du const.

Warum bindest du Skripte mit defer ein?

Das Skript wird erst ausgeführt, wenn das HTML fertig geladen ist. So findet es alle Elemente und blockiert den Seitenaufbau nicht.

Was liefert querySelectorAll zurück?

Eine Liste (NodeList) aller passenden Elemente, die du z.B. mit forEach durchlaufen kannst.

Wozu dient event.preventDefault()?

Es verhindert das Standardverhalten des Browsers, z.B. dass ein Formular die Seite neu lädt oder ein Link wegnavigiert.

Was ist Event Delegation?

Ein Listener auf einem Elternelement reagiert auf Ereignisse seiner Kinder. Das spart Listener und funktioniert auch für später hinzugefügte Elemente.

Warum braucht es bei fetch ein await oder then?

Das Laden dauert eine Weile. fetch liefert ein Promise, und erst mit await oder then hast du die tatsächlichen Daten.

Wo siehst du, ob eine JSON-Datei überhaupt geladen wurde?

Im Network-Tab der DevTools, inklusive Statuscode (z.B. 200 oder 404) und Inhalt der Antwort.

Prüfung

Stolpersteine & Prüfungstipps

Typische Stolpersteine

  • Das Skript im head ohne defer einbinden und sich wundern, warum querySelector null liefert.
  • Werte aus Eingabefeldern direkt rechnen, obwohl sie Text sind: '10' + 5 ergibt '105'.
  • Styles per JavaScript setzen statt Klassen zu wechseln, sodass Gestaltung und Logik vermischt werden.
  • Interaktive Elemente aus div statt button bauen, die dann nicht per Tastatur bedienbar sind.
  • Fehlermeldungen in der Konsole ignorieren und stattdessen zufällig Code ändern.

Tipps für den Kompetenznachweis

  • Schreib den Ablauf zuerst in Pseudocode als Kommentar. Dann füllst du die Lücken mit echtem Code.
  • Teste nach jeder kleinen Änderung im Browser. Zehn Zeilen ohne Test führen zu langer Fehlersuche.
  • Lass die Konsole immer offen. Rote Meldungen zeigen oft genau die Zeile mit dem Fehler.
  • Verwende sprechende Namen wie 'gesamtpreis' statt 'x'. Experten bewerten auch die Lesbarkeit.

Glossar

Begriffe kurz erklärt

DOM
Baumstruktur, in der der Browser die HTML-Seite verwaltet und die JavaScript lesen und verändern kann.
Variable
Benannter Speicherplatz für einen Wert, in JavaScript mit let oder const angelegt.
Funktion
Benannter Codeblock, der Parameter entgegennimmt, eine Aufgabe erledigt und optional einen Wert zurückgibt.
Event
Ereignis im Browser, z.B. ein Klick, eine Eingabe oder das Absenden eines Formulars.
Event Listener
Funktion, die ausgeführt wird, sobald ein bestimmtes Event an einem Element eintritt.
JSON
Textformat für strukturierte Daten aus Objekten und Arrays, das JavaScript direkt verarbeiten kann.
fetch
Browserfunktion, um Daten von einer URL zu laden, z.B. eine JSON-Datei oder eine API.
Promise
Objekt für ein Ergebnis, das erst später vorliegt, z.B. die Antwort eines Servers.
Breakpoint (Debugging)
Markierung im Code, an der der Browser anhält, damit du Variablen und Ablauf untersuchen kannst.

Mit KI-Tutor

Jeder Kurs hat einen persönlichen KI-Tutor

  • Erklärt in deinem Tempo
  • Debuggt mit dir
  • Fachgespräch wie im QV
  • Unbegrenzt neue Übungen

Denkanstösse statt fertiger Lösungen. In der Gratis-Lektion zum Ausprobieren.

KI-Tutor · Modul 164Nur Tipps

Mein JOIN liefert plötzlich doppelte Zeilen. Was mache ich falsch?
Gute Frage! Schau dir die Spalte an, über die du verbindest: Ist sie in beiden Tabellen eindeutig? Was passiert mit einer Kundin, die zwei Bestellungen hat?
Ah, dann kommt sie zweimal vor …
Genau. Willst du die Bestellungen zählen oder nur die Kundinnen sehen? Je nachdem hilft dir GROUP BY oder DISTINCT.

Tutavio

So helfen wir dir bei Modul 288

  • Wir gehen mit dir Schritt für Schritt durch deinen Code, setzen Breakpoints und zeigen dir, was in jeder Zeile passiert.
  • Wir übersetzen mit dir Aufgabenstellungen aus dem Unterricht zuerst in Pseudocode, damit du den Einstieg findest.
  • Wir bauen gemeinsam typische Komponenten wie Akkordeon, Galerie oder Filter und besprechen, wie sie barrierefrei bleiben.
  • Vor dem Kompetenznachweis lösen wir Prüfungsaufgaben unter Zeitdruck und machen danach ein Code-Review.

Unverbindlich anfragen. Wir melden uns innert 24 Stunden.

Tutor:in für Modul 288 finden

Passende Module

Diese Seite ist eine eigene Lernhilfe von Tutavio und keine offizielle Modulbeschreibung. Nummer, Titel und Einordnung stammen aus den öffentlichen Bildungsplänen. Die verbindliche Modulidentifikation findest du im Modulbaukasten von ICT-Berufsbildung Schweiz.

Gratis-LektionNachhilfe