前提・実現したいこと
予約機能付きのカレンダーを実装しています。
フレームワークはruby on railsを使用しています。
カレンダーを実装するにあたりjavascriptを用いています。
tableのtdがデフォルトでは日にちと下に○が表示されていてtdクリック時に-となるようにしたいです。
javascriptに関しては最近勉強し始めたばかりなのであまり知識がありません。なのでサンプルコードを交えてご教示していただけると理解をしやすいのです。
よろしくお願いします。
###該当ソースコード
html
1<!-- カレンダー --> 2<p>今日:<input type="text" class="date"></p> 3<h3 class="calendar-title"><input type="button" name="lastM" value="先月"><span id="js-year"></span>年 <span id="js-month"></span>月<input type="button" name="nextM" value="先月"></h3> 4<table class="show"> 5 <thead> 6 <tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr> 7 </thead> 8 <tbody id="js-calendar-body"></tbody> 9</table>
該当のソースコード
javascript
1var $window = $(window); 2var $year = $('#js-year'); 3var $month = $('#js-month'); 4var $tbody = $('#js-calendar-body'); 5 6var today = new Date(); 7var currentYear = today.getFullYear(), 8 currentMonth = today.getMonth(); 9 10//表示カレンダーの月変更 11/*if ('lastM == click') { 12 $month =- 1; 13}else if ('nextM == click') { 14 $month =+ 1; 15}*/ 16 17$window.on('load',function(){ 18 calendarHeading(currentYear, currentMonth); 19 calendarBody(currentYear, currentMonth, today); 20}); 21 22function calendarBody(year, month, today){ 23 var todayYMFlag = today.getFullYear() === year && today.getMonth() === month ? true : false; // 本日の年と月が表示されるカレンダーと同じか判定 24 var startDate = new Date(year, month, 1); // その月の最初の日の情報 25 var endDate = new Date(year, month + 1 , 0); // その月の最後の日の情報 26 var startDay = startDate.getDay();// その月の最初の日の曜日を取得 27 var endDay = endDate.getDate();// その月の最後の日の曜日を取得 28 var textSkip = true; // 日にちを埋める用のフラグ 29 var textDate = 1; // 日付(これがカウントアップされます) 30 var tableBody =''; // テーブルのHTMLを格納する変数 31 var on_of = ["○","-"];//○とーの判定について 32 33 for (var row = 0; row < 6; row++){ 34 var tr = '<tr>'; 35 36 for (var col = 0; col < 7; col++) { 37 if (row === 0 && startDay === col){ 38 textSkip = false; 39 } 40 if (textDate > endDay) { 41 textSkip = true; 42 } 43 var addClass = todayYMFlag && textDate === today.getDate() ? 'is-today' : ''; 44 var textTd = textSkip ? ' ' : textDate++; 45 var td = '<td class="'+addClass+'">'+textTd+'<br>'+on_of[0]+'</td>';//ここで判定 46 tr += td; 47 } 48 tr += '</tr>'; 49 tableBody += tr; 50 } 51 $tbody.html(tableBody); 52} 53 54function calendarHeading(year, month){ 55 $year.text(year); 56 $month.text(month + 1); 57}
試したこと
//補足
デフォルトで○が表示される処理までなんとか出来ました。
var td = '<td class="'+addClass+'">'+textTd+'<br>'+on_of[0]+'</td>';
関数calendarbody内でif文で条件分岐してみたのですが、クリック時の処理の書き方が分かりませんでした。
補足情報(FW/ツールのバージョンなど)
rails5.2

回答2件
あなたの回答
tips
プレビュー