我希望将未来12个月的当前月份和年份绑定到下拉列表。我使用以下代码绑定月份和年份。
function writeMonthOptions() {
var myselect = document.getElementById("drp6"), year = new Date().getFullYear();
var today = new Date();
var optionValues;
var gen = function (max) {
do {
optionValues = months[today.getMonth() + max] + ' ' + year;
myselect.add(new Option(optionValues, optionValues), null);
max++;
} while (max < 12);
}(0);
}
我的HTML代码:
<select name="drp6" id="drp6"></select>
但我得到如下选择选项:
2015年7月
2015年8月
2015年9月
2015年10月
2015年11月
2015年12月
undefined 2015
undefined 2015
undefined 2015
undefined 2015
undefined 2015年
我该如何解决?感谢
答案 0 :(得分:1)
由于只有12个月,如果你试图在optionValues = months[today.getMonth() + max] + ' ' + year;
中获得数月[13],那么它将被“未定义”。
此外,年份应该是相当大的一部分,当你进入新的一年时,年份的价值应该是2016年。
您可以更改为:
//demo value.
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
function writeMonthOptions() {
var myselect = document.getElementById("drp6"), year = new Date().getFullYear();
var today = new Date();
var optionValues;
var gen = function (max) {
var curMonth = today.getMonth();
var curYear = year; // presevere outer year value if you hava other use
do {
optionValues = months[curMonth] + ' ' + curYear;
myselect.add(new Option(optionValues, optionValues), null);
++curMonth;
// When months reach the 13th ele of months, advance to next year.
if (curMonth === months.length) {
++curYear;
curMonth = 0;
}
max++;
} while (max < 12);
}(0);
}
// test.
writeMonthOptions();
<select id="drp6"></select>
答案 1 :(得分:1)
您只需将months
索引更改为:(today.getMonth() + max) % today.getMonth()
。
编辑更改年份:
此外,您需要调整年份,这会给我们:optionValues = months[index % months.length] + ' ' + (year + Math.floor(index / months.length));
这就是你需要改变的全部。
window.onload = function() {
function writeMonthOptions() {
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var myselect = document.getElementById("drp6"), year = new Date().getFullYear();
var today = new Date();
var optionValues;
var index;
var gen = function (max) {
do {
index = today.getMonth() + max;
optionValues = months[index % months.length] + ' ' + (year + Math.floor(index / months.length));
myselect.add(new Option(optionValues, optionValues), null);
max++;
} while (max < 12);
}(0);
}
writeMonthOptions();
};
&#13;
<select name="drp6" id="drp6"></select>
&#13;