您会注意到,提供 dateFormat 对于新输入的 dates效果很好,但它不会改变value
已经提供给日期输入字段的属性。我花了一些时间,我不确定这个解决方案是否理想,但这里解释了我的情况和解决它的代码。将来可能会帮助其他人解决同样的问题。在我的示例中,我将dd/MM/yyyy
其用作显示格式。
- 该页面包含任意数量的日期输入字段,这些字段可能已经或可能没有按W3C 指定
value
的 format 提供的属性。yyyy-MM-dd
- 一些浏览器将有自己的输入控件来处理日期。在撰写本文时,例如 Opera 和 Chrome。这些应该期望并以上述格式存储日期,同时根据客户的区域设置呈现它们。您可能不想/不需要在这些浏览器中创建 jqueryui 日期选择器。
- 没有内置控件来处理日期输入字段的浏览器将需要 jqueryui 日期选择器以及“alt”不可见字段。
- 具有格式的不可见 alt 输入字段
yyyy-MM-dd
必须具有原始名称和唯一 id 才能使表单逻辑继续工作。
- 最后,
yyyy-MM-dd
必须解析显示输入字段的值并将其替换为所需的对应项。
所以,这里是代码,使用Modernizr来检测客户端是否能够本地呈现日期输入字段。
if (!Modernizr.inputtypes.date) {
$('input[type=date]').each(function (index, element) {
/* Create a hidden clone, which will contain the actual value */
var clone = $(this).clone();
clone.insertAfter(this);
clone.hide();
/* Rename the original field, used to contain the display value */
$(this).attr('id', $(this).attr('id') + '-display');
$(this).attr('name', $(this).attr('name') + '-display');
/* Create the datepicker with the desired display format and alt field */
$(this).datepicker({ dateFormat: "dd/mm/yy", altField: "#" + clone.attr("id"), altFormat: "yy-mm-dd" });
/* Finally, parse the value and change it to the display format */
if ($(this).attr('value')) {
var date = $.datepicker.parseDate("yy-mm-dd", $(this).attr('value'));
$(this).attr('value', $.datepicker.formatDate("dd/mm/yy", date));
}
});
}