You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript按钮点击无响应:如何实现点击按钮显示年月日历网格?

解决按钮点击无反应,实现点击显示日历的问题

看起来你已经搭好了输入月份、年份和触发按钮的基础结构,现在点击按钮没反应是因为还没给按钮绑定点击事件,也没有编写生成日历的核心逻辑。我来一步步帮你实现:

首先,先给页面加一个用来展示日历的容器,不然生成的日历没地方放:

<input type="number" name="a" id="month" placeholder="输入月份(1-12)" /> 
<input type="number" name="a" id="year" placeholder="输入年份" /> 
<button type="button" class="btn btn-secondary" id="clickMe">生成日历</button>
<!-- 新增日历容器 -->
<div id="calendarContainer"></div>

接下来编写JavaScript逻辑,核心是给按钮绑定点击事件,在点击时生成并渲染日历:

// 获取页面元素
const monthInput = document.getElementById('month');
const yearInput = document.getElementById('year');
const generateBtn = document.getElementById('clickMe');
const calendarContainer = document.getElementById('calendarContainer');

// 给按钮添加点击事件监听
generateBtn.addEventListener('click', () => {
  // 获取输入的月份和年份,转成数字
  const month = parseInt(monthInput.value);
  const year = parseInt(yearInput.value);

  // 先做输入合法性校验
  if (isNaN(month) || isNaN(year) || month < 1 || month > 12) {
    alert('请输入合法的月份(1-12)和年份!');
    return;
  }

  // 调用生成日历的函数,把结果插入容器
  const calendarHTML = generateCalendar(month, year);
  calendarContainer.innerHTML = calendarHTML;
});

// 生成日历HTML的函数
function generateCalendar(month, year) {
  // 注意:JavaScript的Date对象月份是0-11,所以要减1
  const firstDay = new Date(year, month - 1, 1).getDay();
  // 获取当月的天数
  const daysInMonth = new Date(year, month, 0).getDate();
  // 星期表头
  const weekDays = ['日', '一', '二', '三', '四', '五', '六'];

  let html = '<table border="1" cellpadding="8" cellspacing="0">';
  // 添加星期表头
  html += '<tr>';
  weekDays.forEach(day => {
    html += `<th>${day}</th>`;
  });
  html += '</tr>';

  let dayCount = 1;
  // 最多6行(每月最多31天,加上前面的空白最多占6行)
  for (let i = 0; i < 6; i++) {
    html += '<tr>';
    // 每行7列(对应一周7天)
    for (let j = 0; j < 7; j++) {
      // 第一行的前firstDay个单元格是空的
      if (i === 0 && j < firstDay) {
        html += '<td></td>';
      } else if (dayCount > daysInMonth) {
        // 当月天数用完后,剩下的单元格是空的
        html += '<td></td>';
      } else {
        html += `<td>${dayCount}</td>`;
        dayCount++;
      }
    }
    html += '</tr>';
    // 如果天数已经用完,提前结束循环
    if (dayCount > daysInMonth) break;
  }
  html += '</table>';
  return html;
}

关键要点说明:

  • 事件绑定:通过addEventListener给按钮绑定了click事件,只有点击按钮时才会触发日历生成逻辑
  • 输入校验:先检查用户输入的月份和年份是否合法,避免无效输入导致错误
  • 日期处理:利用JavaScript的Date对象获取当月第一天是星期几,以及当月的总天数,这是生成日历网格的核心
  • 渲染逻辑:用表格来构建日历网格,先渲染星期表头,再逐行逐列填充日期,空白的格子用空单元格填充

这样修改后,你输入合法的月份和年份,点击按钮就能看到对应的日历啦~

内容的提问来源于stack exchange,提问作者gameloverr2

火山引擎 最新活动