15 of 17 menu

Kalendario perjungimo klaida JavaScript

Tarkime, norime padaryti rodykles kalendoriui perjungti. Šiuo atveju galima padaryti keletą būdingų klaidų. Pažiūrėkime į jas.

Tarkime, kad turime perjungimo mygtukus ir elementą, į kurį paprastumo dėlei rodysime ne kalendorių, o tik metus ir mėnesio pavadinimą:

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

Gaukime nuorodas į mūsų elementus:

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

Tarkime, kad taip pat turime funkciją, kuri parametru priima mėnesio numerį ir grąžina jo pavadinimą:

function getMonthName(month) { let names = [ 'Saus.', 'Vas.', 'Kov.', 'Bal.', 'Geg.', 'Bir.', 'Liep.', 'Rugp.', 'Rugs.', 'Spal.', 'Lapkr.', 'Gruod.' ]; return names[month]; }

Kai puslapis užsikrauna, gaukime dabartinius metus ir mėnesį:

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

Atvaizduokime mūsų elemente metus ir mėnesio pavadinimą (kalendoriaus imitacija):

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

Dabar uždėkime paspaudimo apdorotojus ant perjungiklių:

prev.addEventListener('click', function() { // rodome ankstesnį mėnesį }); next.addEventListener('click', function() { // rodome kitą mėnesį });

Dabar apsvarstykime, kokias klaidas galima padaryti įgyvendinant perjungiklius.

Pirmoji klaida

Tarkime, kuris nors programuotojas įgyvendino mėnesių perjungimo mygtukus:

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

Šis programuotojas, tačiau, padarė klaidą, dėl kurios mėnuo perjungiamas tik pirmu paspaudimu, bet ne vėlesniais.

Reikalas tas, kad kintamasis month nekeičiamas viduje funkcijų - prie jo turinio tiesiog pridedamas vienetas ir rezultatas siunčiamas į funkciją getMonthName.

Kadangi mūsų kintamasis nepasikeitė, tai su kitu paspaudimu jame vis tiek bus dabartinis mėnuo - ir niekas nesikeis.

Išspręskime problemą:

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

Galima supaprastinti:

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

Antroji klaida

Dažnai pamirštama, kad mėnuo turi keistis tam tikrame diapazone - nuo 0 iki 11. Pasiekus diapazono ribą turime pakeisti metus (pirmyn arba atgal), o mėnesį nustatyti į pradinę reikšmę.

Padarykime tai:

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); });
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti