前提
Javascriptの基本を学んだので、何か作ってみたいと思い、
現在J簡単なカレンダーアプリを作っています!
今月分のカレンダーは表示することができました!
発生している問題・エラーメッセージ
そして次は、ボタンを押すことで「先月」「来月」のカレンダーも表示させたいと思っています。
コードを書いてみたのですが、ボタンを押しても反応がなく(画面が変わらない)、エラーも出ないのでどこがおかしいのか、分からず、悩んでいます。
該当のソースコード
HTML
1 <section class="month"> 2 <div class="month__items"> 3 4 <!-- 先月ボタン --> 5 <span class="month__item monthPrev"> 6 <i id="prev" class="fas fa-chevron-left"></i> 7 </span><!-- /.month__item monthPrev --> 8 9 <h2 id="month" class="month__item monthNow"> 10 </h2><!-- /.month__item monthNow --> 11 12 <!-- 来月ボタン --> 13 <span class="month__item monthNext"> 14 <i id="next" class="fas fa-chevron-right"></i> 15 </span><!-- /.month__item monthNext--> 16 17 </div><!-- /.month__items --> 18 </section><!-- /.month --> 19 20 <!-- カレンダー表示 --> 21 <section class="calendar"> 22 <table class="table"> 23 </table><!-- /. table --> 24 </section><!-- /.calendar -->
JS
1'use strict'; 2 3const today = new Date(); 4const currentYear = today.getFullYear(); 5const currentMonth = today.getMonth(); 6const weeks = [ 7 'Sun', 8 'Mon', 9 'Tue', 10 'Wed', 11 'Thu', 12 'Fri', 13 'Sat' 14]; 15const months = [ 16 'January', 17 'February', 18 'March', 19 'April', 20 'May', 21 'June', 22 'July', 23 'August', 24 'September', 25 'October', 26 'November', 27 'December', 28]; 29let dayCount = 1 // 日にちのカウント 30let calendarHtml = '' // HTMLを組み立てる変数 31 32 33const showCalendar = () => { 34 35 //月初めの日付を取得 36 const startDate = new Date(currentYear, currentMonth, 1) 37 const startDay = startDate.getDay() 38 39 //月末の日付を取得 40 const endDate = new Date(currentYear, currentMonth - 1, 0) 41 const endDay = endDate.getDate() 42 43 //前月の日付を取得 44 const lastMonthEndDate = new Date(currentYear, currentMonth, 0) 45 const lastMonthEndDay = lastMonthEndDate.getDate() 46 47 48 //現在の月を表示 49 const month = document.getElementById('month'); 50 month.innerHTML = months[currentMonth]; 51 52 53 // 曜日の行を作成 54 calendarHtml += '<table>' 55 calendarHtml += '<thead>' 56 calendarHtml += '<tr class="tbody__weeks">' 57 for (let i = 0; i < weeks.length; i++) { 58 calendarHtml += '<th class="tbody__week">' + weeks[i] + '</th>' 59 } 60 calendarHtml += '</tr>' 61 calendarHtml += '</thead>' 62 63 64 //日にちを作成 65 calendarHtml += '<tbody class="tbody">' 66 for (let w = 0; w < 6; w++) { 67 calendarHtml += '<tr class="tbody__days">' 68 69 for (let d = 0; d < 7; d++) { 70 if (w == 0 && d < startDay) { 71 let num = lastMonthEndDay - startDay + d + 1 72 calendarHtml += '<td class="tbody__day -next">' + num + '</td>' 73 74 } else if (dayCount > endDay) { 75 let num = dayCount - endDay 76 calendarHtml += '<td class="tbody__day -next">' + num + '</td>' 77 dayCount++ 78 79 } else { 80 calendarHtml += '<td class="tbody__day">' + dayCount + '</td>' 81 dayCount++ 82 } 83 } 84 calendarHtml += '</tr>' 85 } 86 calendarHtml += '</tbody>'; 87 calendarHtml += '</table>'; 88 89 const calendar = document.querySelector('.calendar') 90 calendar.innerHTML = calendarHtml; 91}; 92 93 94//先月を表示 95const prev = document.querySelector('.monthPrev i'); 96prev.addEventListener('click', () => { 97 today.setMonth(currentMonth - 1); 98 showCalendar(); 99}); 100 101//来月を表示 102const next = document.querySelector('.monthNext i'); 103next.addEventListener('click', () => { 104 today.setMonth(currentMonth + 1); 105 showCalendar(); 106}); 107 108showCalendar(); 109
補足情報(FW/ツールのバージョンなど)
どういった考え方をすればよいのか教えていただきたいです。
よろしくお願いいたします
回答3件
あなたの回答
tips
プレビュー