jQueryUI datepicker似乎有一个错误,并没有按要求包装世纪。我把69作为短年截止,似乎没有效果。相反,UI显示1970年低于87的任何一年(所以它不接受它们是有效的?)。我在那里做错了吗?当类型值在1970-1986之间时,它们不会同步到UI。
目标是允许用户设置1970年至2069年之间的任何日期,其中70的缩写表示1970年,69表示分别为2069年。
JSFiddle。 Stack Overflow的嵌入式播放器无法正确显示datepicker的UI,它会隐藏输入字段 - 请使用jsfiddle。
$(document).ready(function() {
$('#myDate').datepicker({
changeMonth: true,
changeYear: true,
dateFormat: 'm/d/y',
shortYearCutoff: '69',
yearRange: '1970:2069'
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
<input id="myDate" name="myDate" type="date" value="" />
答案 0 :(得分:1)
在输入字段中使用type="text"
而不是type="date"
。当您使用type="date"
时,浏览器会控制原始输入字段的格式,这会覆盖日期选择器的dateFormat
选项;它没有
$(document).ready(function() {
$('#myDate').datepicker({
changeMonth: true,
changeYear: true,
dateFormat: 'm/d/y',
shortYearCutoff: '69',
yearRange: '1970:2069'
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
<input id="myDate" name="myDate" type="text" value="" />
&#13;
答案 1 :(得分:1)
TL; DR shortYearCutoff
必须是整数,我把它作为字符串。在这种情况下,jQueryUI datepicker默默地忽略它。我的代码需要进行以下更改才能使其正常工作。
$(document).ready(function() {
$('#myDate').datepicker({
changeMonth: true,
changeYear: true,
dateFormat: 'm/d/y',
shortYearCutoff: 69, //integer is important, string will get ignored
yearRange: '1970:2069'
});
});
以下是 jQueryUI.js 中的相关代码块。
_getFormatConfig: function( inst ) {
//...
shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
//return ...
},
我想正确的方法是检查值是否可以解析为int,然后它将更符合Javascript的无类型精神。离开jQueryUI团队的决定。