15 of 17 menu

Kalendāra pārslēgšanas kļūda JavaScript

Pieņemsim, ka mēs vēlamies izveidot bultas kalendāra pārslēgšanai. Šajā gadījumā var pieļaut vairākas raksturīgas kļūdas. Apskatīsim tās.

Pieņemsim, ka mums ir pārslēgšanas pogas un elements, kurā vienkāršības labad parādīsim nevis kalendāru, bet tikai gadu un mēneša nosaukumu:

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

Iegūsim atsauces uz mūsu elementiem:

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

Pieņemsim, ka mums ir arī funkcija, kas parametru pieņem mēneša numuru un atgriež tā nosaukumu:

function getMonthName(month) { let names = [ 'jan', 'feb', 'mar', 'apr', 'mai', 'jūn', 'jūl', 'aug', 'sep', 'okt', 'nov', 'dec' ]; return names[month]; }

Ielādējot lapu, iegūstam pašreizējo gadu un mēnesi:

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

Parādīsim mūsu elementā gadu un mēneša nosaukumu (kalendāra imitācija):

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

Tagad uzliksim pārslēdzējiem klikšķa apstrādes funkcijas:

prev.addEventListener('click', function() { // rāda iepriekšējo mēnesi }); next.addEventListener('click', function() { // rāda nākamo mēnesi });

Tagad apskatīsim, kādas kļūdas var pieļaut, realizējot pārslēdzējus.

Pirmā kļūda

Pieņemsim, ka kāds programmētājs realizēja mēnešu pārslēgšanas pogas:

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

Šis programmētājs tomēr pieļāva kļūdu, kuras dēļ mēnesis pārslēdzas tikai pēc pirmā klikšķa, bet ne pēc nākamajiem.

Lieta ir tāda, ka mainīgais month nemainās funkciju iekšienē - tā saturs tiek vienkārši palielināts par vienu un rezultāts tiek nosūtīts uz funkciju getMonthName.

Tā kā mūsu mainīgais nav mainījies, tad nākamajā klikšķī tajā joprojām būs pašreizējais mēnesis - un nekas nemainīsies.

Izlabosim problēmu:

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

Var vienkāršot:

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

Otrā kļūda

Bieži aizmirst, ka mēnesim jāmainās noteiktā diapazonā - no 0 līdz 11. Sasniedzot diapazona robežu, mums jāmaina gads (uz priekšu vai atpakaļ), un mēnesi jāatiestata sākotnējā vērtībā.

Izpildīsim to:

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); });
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt