Javascript 在月份下拉列表中选择选项12时,为什么12月份不加载?
我正在写完整的日历。 在从互联网上获得参考资料后,我手动添加了月份下拉列表。 到目前为止,它工作正常。 问题是,到9月份为止,它运行良好。 但当我选择十月时,它只显示九月,然后对于十一月-它显示十月,对于十二月,它只显示十一月。十二月在此下拉列表和日历中不起作用 我的代码如下:Javascript 在月份下拉列表中选择选项12时,为什么12月份不加载?,javascript,date,fullcalendar,momentjs,fullcalendar-3,Javascript,Date,Fullcalendar,Momentjs,Fullcalendar 3,我正在写完整的日历。 在从互联网上获得参考资料后,我手动添加了月份下拉列表。 到目前为止,它工作正常。 问题是,到9月份为止,它运行良好。 但当我选择十月时,它只显示九月,然后对于十一月-它显示十月,对于十二月,它只显示十一月。十二月在此下拉列表和日历中不起作用 我的代码如下: $(".fc-right").append('<select class="select_month"><option value="">Select Month</option>&l
$(".fc-right").append('<select class="select_month"><option value="">Select Month</option><option value="1">Jan</option><option value="2">Feb</option><option value="3">Mrch</option><option value="4">Aprl</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">Aug</option><option value="9">Sep</option><option value="10">Oct</option><option value="11">Nov</option><option value="12">Dec</option></select>');
$(".select_month").on("change", function (event) {
$('#calendar_full').fullCalendar('changeView', 'month', this.value);
$('#calendar_full').fullCalendar('gotoDate', y + '-' + this.value + '-1');
}); // y assigned as selected year.
$(“.fc right”).append('Select MonthJanFebMrchAprlMayJuneJulyAugSepOctNovDec');
$(“.select_month”)。关于(“更改”,函数(事件){
$('#calendar_full').fullCalendar('changeView','month',this.value);
$(“#calendar_full”).fullCalendar('gotoDate',y+'-'+this.value+'-1');
}); // y指定为所选年份。
如果我将10月至11日、11月至12日和12月至13日的选项值更改为正常值,则10月和11月仍不工作
如何修复它。请提供帮助。您没有创建有效的日期字符串以传递给fullCalendar函数 1)
此值将是一个数字changeView
希望您提供完整的日期(请参阅)
2) y+'-'+this.value+'-1'
将生成类似于2019-1-1
或2019-10-1
的日期,这些日期是无效的RFC2822或ISO日期格式,这是由于月份和日期部分中的单个数字值造成的
当您尝试使用这些值作为日期时,您将在控制台(由momentJS生成)中看到一条警告,因为它无法保证这些值是否被正确解释。很明显,在你的情况下,有一些不正确的解释,导致你的问题。提供了支持的日期格式的清晰列表。另见相关文件
此外,在这里使用changeView和
是多余的。如果要确保选择“月”视图,请使用changeView
,并传递日期。如果只想更改日期而不关心视图类型,请使用goToDate
。对于这个例子,我假设您想要changeView
解决方法很简单:
1) 确保所有下拉选项都有两位数的值
2) 将硬编码的日期字符串也设置为两位数01
3) 将完整日期字符串传递给fullCalendar函数
$(".fc-right").append('<select class="select_month"><option value="">Select Month</option><option value="01">Jan</option><option value="02">Feb</option><option value="03">Mrch</option><option value="04">Aprl</option><option value="05">May</option><option value="06">June</option><option value="07">July</option><option value="08">Aug</option><option value="09">Sep</option><option value="10">Oct</option><option value="11">Nov</option><option value="12">Dec</option></select>');
$(".select_month").on("change", function(event) {
var dateStr = y + '-' + this.value + '-01';
console.log(dateStr);
$('#calendar_full').fullCalendar('changeView', 'month', dateStr);
});
$(“.fc right”).append('Select MonthJanFebMrchAprlMayJuneJulyAugSepOctNovDec');
$(“.select_month”)。关于(“更改”,函数(事件){
var dateStr=y+'-'+this.value+'-01';
console.log(dateStr);
$('calendar'u full')。fullCalendar('changeView','month',dateStr);
});
工作演示:您使用自己的下拉列表选择月份,而不是使用FullCalendar提供的控件,这有什么原因吗?如果没有工作示例,我会假设您可能没有为changeView
或gotoDate
方法向插件传递正确/兼容的日期/值。如果我没有弄错的话。您正在传递单个数字(作为字符串)。请尝试传入类似于'2019-'+('00'+this.value).slice(-2)+'-01'
的内容。@Barmar可能吧?在这种情况下,OP可以尝试为gotoDate
调用传递相同的值。我认为关键是要使用格式正确的日期。可能不需要同时使用changeView
和gotoDate
。为什么它可以与2019-3-1
一起使用,但与2019-10-1
一起关闭1?它们都有一个位数的日部分。“这只是一个意外,它第一次起作用吗?”巴尔马我想是的。如果JS日期构造函数无法识别格式,那么它会尽全力处理您提供的任何内容。结果不能保证。不同的浏览器引擎之间的行为甚至可能有所不同。它这样做,而不是仅仅抛出一个错误,这有点愚蠢。我认为它使用的是moment.js解析器,而不是原生的js解析器。fullCalendar使用的是momentJS,但是如果使用错误的日期字符串,您在浏览器中看到的momentJS的完整警告如下:“弃用警告:提供的值不是可识别的RFC2822或ISO格式。moment构造回到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822/ISO日期格式,并将在即将发布的主要版本中删除。请参阅以了解更多信息。“因此,基本上,momentJS无法读取它并警告您。JS Date也不能始终读取它,但不会警告您。这是有道理的。关于本机日期分析器的奇怪结果,还有许多其他问题。