15 of 17 menu

JavaScript-da kalendar almashish xatosi

Faraz qilaylik, kalendar almashish uchun o'qlar yaratmoqchimiz. Bu holda bir qancha xos xatolarga yo'l qo'yish mumkin. Keling, ularni ko'rib chiqaylik.

Faraz qilaylik, bizda almashish tugachalari va oddiy qilish uchun kalendarni emas, balki shunchaki yil va oy nomini chiqaradigan element mavjud:

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

Elementlarga havolalarni olamiz:

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

Faraz qilaylik, shuningdek, parametr sifatida oy raqamini qabul qiladigan va uning nomini qaytaradigan funktsiya mavjud:

function getMonthName(month) { let names = [ 'yan', 'fev', 'mar', 'apr', 'may', 'iyn', 'iyl', 'avg', 'sen', 'okt', 'noy', 'dek' ]; return names[month]; }

Keling, sahifa yuklanganda joriy yil va oyni olamiz:

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

Elementimizga yil va oy nomini chiqaramiz (kalendarning imitatsiyasi):

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

Keling, endi almashgichlarga kliklar uchun ishlov beruvchilarni qo'shamiz:

prev.addEventListener('click', function() { // oldingi oyni ko'rsatamiz }); next.addEventListener('click', function() { // keyingi oyni ko'rsatamiz });

Keling, endi almashgichlarni amalga oshirishda qanday xatolarga yo'l qo'yish mumkinligini ko'rib chiqaylik.

Birinchi xato

Faraz qilaylik, qandaydir dasturchi oy almashish tugachalarni quyidagicha amalga oshirgan:

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

Biroq, bu dasturchi xatoga yo'l qo'ydi, buning natijasida oy faqat birinchi klikda o'zgaradi, keyingi kliklarda esa o'zgarmaydi.

Muammo shundaki, month o'zgaruvchisi funktsiyalar ichida o'zgarmaydi - uning tarkibiga shunchaki bitta qo'shiladi yoki ayiriladi va natija getMonthName funktsiyasiga yuboriladi.

O'zgaruvchimiz o'zgarmaganligi sababli, keyingi klikda unda hanuzgacha joriy oy turibdi - va hech narsa o'zgarmaydi.

Muammoni tuzatamiz:

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

Soddalashtirish mumkin:

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

Ikkinchi xato

Ko'pincha oy ma'lum bir diapazonda - 0 dan 11 gacha o'zgarishi kerakligi unutiladi. Diapazon chegarasiga yetganda biz yilni o'zgartirishimiz (oldinga yoki orqaga) va oyni boshlang'ich qiymatga qaytarishimiz kerak.

Buni amalga oshiramiz:

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); });
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish