15 of 17 menu

Kalender-Umschaltfehler in JavaScript

Angenommen, wir möchten Pfeile zum Umschalten des Kalenders erstellen. In diesem Fall kann man eine Reihe charakteristischer Fehler machen. Lassen Sie uns diese betrachten.

Angenommen, wir haben Schaltflächen zum Umschalten und ein Element, in das wir der Einfachheit halber keinen Kalender ausgeben, sondern einfach das Jahr und den Namen des Monats:

<button id="prev">prev</button> <div id="elem"></div> <button id="next">next</button>

Holen wir uns Referenzen auf unsere Elemente:

let elem = document.querySelector('#elem'); let prev = document.querySelector('#prev'); let next = document.querySelector('#next');

Angenommen, wir haben auch eine Funktion, die als Parameter die Monatsnummer akzeptiert und deren Namen zurückgibt:

function getMonthName(month) { let names = [ 'янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек' ]; return names[month]; }

Lassen Sie uns beim Laden der Seite das aktuelle Jahr und den Monat abrufen:

let date = new Date; let year = date.getFullYear(); let month = date.getMonth();

Geben wir in unserem Element das Jahr und den Namen des Monats aus (Imitation eines Kalenders):

elem.textContent = year + ' ' + getMonthName(month);

Lassen Sie uns nun auf die Schaltflächen Klick-Handler setzen:

prev.addEventListener('click', function() { // zeige vorherigen Monat }); next.addEventListener('click', function() { // zeige nächsten Monat });

Betrachten wir nun, welche Fehler man bei der Implementierung der Schalter machen kann.

Erster Fehler

Angenommen, ein Programmierer hat die Schaltflächen zum Wechseln der Monate implementiert:

next.addEventListener('click', function() { elem.textContent = year + ' ' + getMonthName(month + 1); }); prev.addEventListener('click', function() { elem.textContent = year + ' ' + getMonthName(month - 1); });

Dieser Programmierer hat jedoch einen Fehler gemacht, wegen dem der Monat nur beim ersten Klick umgeschaltet wird, aber nicht bei den folgenden.

Die Sache ist die, dass die Variable month sich nicht ändert innerhalb der Funktionen - zu ihrem Inhalt wird einfach Eins addiert/subtrahiert und das Ergebnis an die Funktion getMonthName übergeben.

Da sich unsere Variable nicht geändert hat, wird sie beim nächsten Klick nach wie vor den aktuellen Monat enthalten - und nichts wird sich ändern.

Lassen Sie uns das Problem beheben:

next.addEventListener('click', function() { month = month + 1; elem.textContent = year + ' ' + getMonthName(month); }); prev.addEventListener('click', function() { month = month - 1; elem.textContent = year + ' ' + getMonthName(month); });

Man kann es vereinfachen:

next.addEventListener('click', function() { elem.textContent = year + ' ' + getMonthName(++month); }); prev.addEventListener('click', function() { elem.textContent = year + ' ' + getMonthName(--month); });

Zweiter Fehler

Oft wird vergessen, dass sich der Monat in einem bestimmten Bereich ändern sollte - von 0 bis 11. Beim Erreichen der Bereichsgrenze müssen wir das Jahr ändern (vor oder zurück), und den Monat auf den Anfangswert zurücksetzen.

Lassen Sie uns das umsetzen:

next.addEventListener('click', function() { if (month === 11) { month = 0; year++; } else { month++; } elem.textContent = year + ' ' + getMonthName(month); }); prev.addEventListener('click', function() { if (month === 0) { month = 11; year--; } else { month--; } elem.textContent = year + ' ' + getMonthName(month); });
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen