15 of 17 menu

Fejl ved skift af kalender i JavaScript

Lad os sige, at vi vil lave pile til at skifte kalender. I dette tilfælde kan man begå en række karakteristiske fejl. Lad os se på dem.

Lad os sige, at vi har knapper til at skifte og et element, hvor vi for enkelheds skyld vil vise ikke en kalender, men blot et år og månedens navn:

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

Lad os hente referencer til vores elementer:

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

Lad os også sige, at vi har en funktion, som tager månedens nummer som parameter og returnerer dets navn:

function getMonthName(month) { let names = [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ]; return names[month]; }

Lad os ved sidelæsning hente det aktuelle år og måned:

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

Lad os vise året og månedens navn i vores element (efterligning af en kalender):

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

Lad os nu tilføje klik-handlers til skifterne:

prev.addEventListener('click', function() { // viser forrige måned }); next.addEventListener('click', function() { // viser næste måned });

Lad os nu overveje, hvilke fejl man kan lave ved implementering af skifterne.

Første fejl

Lad os sige, at en programmør implementerede knapper til at skifte måneder på denne måde:

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

Denne programmør begik dog en fejl, som fører til, at måneden kun skifter ved det første klik, men ikke ved de efterfølgende.

Grunden er, at variablen month ikke ændres inde i funktionerne - der lægges blot en til eller trækkes en fra fra dens indhold og resultatet sendes til funktionen getMonthName.

Da vores variabel ikke er ændret, vil den indeholde den nuværende måned ved næste klik - og intet vil ændre sig.

Lad os rette problemet:

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

Det kan forenkles:

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

Anden fejl

Man glemmer ofte, at måneden skal ændres inden for et bestemt interval - fra 0 til 11. Ved at nå intervalgrænsen skal vi ændre året (frem eller tilbage), og nulstille måneden til startværdien.

Lad os gøre dette:

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); });
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis