我正在尝试创建两个日期输入,而不是在日期字段中显示年份。我希望格式更容易阅读 - 所以“Fri, Apr 19”而不是“2013/4/19”。我将更传统的格式存储在同时更新的备用字段中。这很好用,除了当我选择未来一年的日期然后返回点击相同的日期输入时。它会加载当前年份的日期。这是一些测试代码,用于显示情况以及我试图解决该行为的尝试。
<form>
<input type="text" name="from" id="ff_from" class="date" value="" />
<input type="text" name="to" id="ff_to" class="date" value="" />
<div class="extra">
<p>Formatted version of dates</p>
<input type="text" disabled id="ff_from_formatted" value="" />
<input type="text" disabled id="ff_to_formatted" value="" />
</div>
</form>
<script>
// add n number of days
Date.prototype.addDays = function(n) {
this.setDate(this.getDate()+n);
return this;
};
$("#ff_from").datepicker({
dateFormat: "D, M dd",
altField:$("#ff_from_formatted"),
altFormat: "yy/mm/dd",
minDate:0,
onClose:function(){
$("#ff_to").focus();
}
}).change(function(){
var fromDate=new Date($("#ff_from_formatted").val());
var toDate=new Date($("#ff_to_formatted").val());
minToDate=fromDate.addDays(1);
if (fromDate >= toDate) {
$("#ff_to").datepicker("setDate", minToDate);
}
$("#ff_to").datepicker("option","minDate", minToDate);
});
$("#ff_to").datepicker({
dateFormat: "D, M dd",
altField:$("#ff_to_formatted"),
altFormat: "yy/mm/dd",
minDate:+1
});
</script>
在这里测试:http: //jsfiddle.net/ZpfAB/9/
重现问题
- 在第一个字段中选择 2014 年的日期
- 再次单击输入字段。它将改为加载当前日期。
编辑:下面的最终解决方案感谢@clav 的帮助 - 这涉及删除 altFields 并改用隐藏的输入字段。我使用了 opacity:0 而不是 display:none,因为在使用 display:none 时我在 ff_to 字段上遇到了奇怪的错误。
<form>
<input type="text" id="ff_from_display" class="date"/>
<input type="text" name="from" id="ff_from" class="date" style="opacity:0;width:0;"/>
<input type="text" id="ff_to_display" class="date"/>
<input type="text" name="to" id="ff_to" class="date" style="opacity:0;width:0;" />
</form>
<script>
// add n number of days
Date.prototype.addDays = function(n) {
this.setDate(this.getDate()+n);
return this;
};
$('#ff_from_display').focus(function() {
$("#ff_from").datepicker('show');
});
$('#ff_to_display').focus(function() {
$("#ff_to").datepicker('show');
});
$("#ff_from").datepicker({
dateFormat: "yy/mm/dd",
minDate:0,
onClose:function(){
$("#ff_to_display").focus();
}
}).change(function(){
var fromDate = $("#ff_from").datepicker('getDate');
$('#ff_from_display').val($.datepicker.formatDate('D, M dd', fromDate));
var toDate=new Date($("#ff_to_formatted").val());
minToDate=fromDate.addDays(1);
if (fromDate >= toDate) {
$("#ff_to").datepicker("setDate", minToDate);
}
$("#ff_to").datepicker("option","minDate", minToDate);
});
$("#ff_to").datepicker({
dateFormat: "yy/mm/dd",
minDate:+1
}).change(function(){
var toDate = $("#ff_to").datepicker('getDate');
$('#ff_to_display').val($.datepicker.formatDate('D, M dd', toDate));
});
</script>