javascript - 使用当前日期、月份和年份填充下拉列表
问题描述
我可能会问你一个简单的问题,但我还是个新手,所以请有人帮助我。我有这个 html 和 jQuery 代码:
$(document).ready(function() {
var d = new Date();
var month = d.getMonth() + 1;
var year = d.getFullYear();
$("#month").val(month);
$("#year").val(year);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="month">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<select id="year">
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
</select>
所以问题是:如何根据它们是 30、31、28 还是闰年(Fevruary 为 29 天)再填充一个显示当前日期的下拉列表,同时显示该月的所有天数?任何帮助将不胜感激。PS这也可以更动态地完成吗?
解决方案
好吧,与其写很多options
标签,不如让一个loop
为你做...请检查我下面的代码,我将在下面给出一个简短的解释。
(此代码使用 jQuery,但使用 vanilla JS 很容易实现)
$(document).ready(function() {
const monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
let qntYears = 4;
let selectYear = $("#year");
let selectMonth = $("#month");
let selectDay = $("#day");
let currentYear = new Date().getFullYear();
for (var y = 0; y < qntYears; y++) {
let date = new Date(currentYear);
let yearElem = document.createElement("option");
yearElem.value = currentYear
yearElem.textContent = currentYear;
selectYear.append(yearElem);
currentYear--;
}
for (var m = 0; m < 12; m++) {
let month = monthNames[m];
let monthElem = document.createElement("option");
monthElem.value = m;
monthElem.textContent = month;
selectMonth.append(monthElem);
}
var d = new Date();
var month = d.getMonth();
var year = d.getFullYear();
var day = d.getDate();
selectYear.val(year);
selectYear.on("change", AdjustDays);
selectMonth.val(month);
selectMonth.on("change", AdjustDays);
AdjustDays();
selectDay.val(day)
function AdjustDays() {
var year = selectYear.val();
var month = parseInt(selectMonth.val()) + 1;
selectDay.empty();
//get the last day, so the number of days in that month
var days = new Date(year, month, 0).getDate();
//lets create the days of that month
for (var d = 1; d <= days; d++) {
var dayElem = document.createElement("option");
dayElem.value = d;
dayElem.textContent = d;
selectDay.append(dayElem);
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="year"></select>
<select id="month"></select>
<select id="day"></select>
有一个名为 的变量qntYears
,您可以在此处设置要在几年中显示的从当前年份回溯多select
少年...
在那之后,有一个循环添加所有月份,这里没什么特别的。
最后一部分是重要的部分,我添加了一个change
回调到selects
年和月。当它们发生变化时,侦听器for loop
会根据年份和当前月份重新创建(使用 a )天数,这非常有用,因为每个月都有不同的天数(28、29、30、31)。执行此操作的
是.function
AdjustDays()
推荐阅读
- sql - 如何从表 B 和 C 更新表 A 列(价格和限制)
- kotlin - 在 Kotlin 中是否有 C# 的 AutoResetEvent 的替代方案?
- arrays - 如何在 HTML 表中的一行中添加相同名称的值
- azure - 如何从部署到 Azure 应用服务的 ACR 访问端点?
- java - 在 Yocto Linux 上没有互联网连接的情况下,Spring Boot 应用程序启动缓慢
- javascript - 如何创建今天的日期和一年前的日期
- typescript - 如何从对象中提取特定类型的键
- docker - Using Docker Buildkit --mount=type=cache for caching Nuget packages for .NET 5 dockerfile
- c# - 使用 .NET LDAPConnection 执行绑定到 LDAP 实例
- mqtt - 如何使用 libmosquitto 库在连接时检测到与 MQTT 代理的连接中的用户/密码问题?