15 of 17 menu

JavaScript-ում օրացույցի փոխարկման սխալ

Ենթադրենք՝ ուզում ենք ստեղծել օրացույցը փոխարկելու սլաքներ: Այս դեպքում կարելի է թույլ տալ մի շարք բնորոշ սխալներ: Եկեք դիտարկենք դրանք:

Ենթադրենք՝ ունենք փոխարկման կոճակներ և մի տարր, որի մեջ պարզության համար մենք կտեղադրենք ոչ թե ամբողջ օրացույց, այլ պարզապես տարին և ամսվա անվանումը.

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

Ստացենք մեր տարրերի հղումները.

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

Ենթադրենք՝ ունենք նաև ֆունկցիա, որը պարամետրով ընդունում է ամսվա համարը և վերադարձնում է դրա անվանումը.

function getMonthName(month) { let names = [ 'հնվ', 'փտվ', 'մրտ', 'ապր', 'մյս', 'հնս', 'հլս', 'օգս', 'սեպ', 'հոկ', 'նոյ', 'դեկ' ]; return names[month]; }

Եկեք էջի բեռնվելուց հետո ստանանք ընթացիկ տարին և ամիսը.

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

Տեղադրենք մեր տարրի մեջ տարին և ամսվա անվանումը (օրացույցի իմիտացիա).

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

Եկեք այժմ փոխարկիչների վրա տեղադրենք կլիկների մշակիչներ.

prev.addEventListener('click', function() { // ցույց տալ նախորդ ամիսը }); next.addEventListener('click', function() { // ցույց տալ հաջորդ ամիսը });

Այժմ դիտարկենք, թե ինչ սխալներ կարելի է թույլ տալ փոխարկիչների իրականացման ժամանակ:

Առաջին սխալը

Ենթադրենք՝ ինչ-որ ծրագրավորող իրականացրել է ամիսների փոխարկման կոճակները.

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

Այս ծրագրավորողը, սակայն, թույլ տվեց սխալ, որի պատճառով ամիսը փոխարկվում է միայն առաջին կլիկի ժամանակ, բայց ոչ հաջորդների:

Բանն այն է, որ month փոփոխականը չի փոխվում ֆունկցիաների ներսում՝ դրա պարունակությանը պարզապես ավելացնում են մեկ և արդյունքը ուղարկում են getMonthName ֆունկցիային:

Քանի որ մեր փոփոխականը չի փոխվել, ապա հաջորդ կլիկի ժամանակ դրա մեջ դեռ կլինի ընթացիկ ամիսը՝ և ոչինչ չի փոխվի:

Ուղղենք խնդիրը.

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

Կարելի է պարզեցնել.

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

Երկրորդ սխալը

Հաճախ մոռանում են, որ ամիսը պետք է փոխվի որոշակի տիրույթում՝ 0-ից 11: Տիրույթի սահմանին հասնելու դեպքում մենք պետք է փոխենք տարին (առաջ կամ հետ), իսկ ամիսը վերականգնենք սկզբնական արժեքին:

Եկեք անենք դա.

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); });
Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել