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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ