关于在 Google Chrome 中输入 [type=date] 的快速常见问题解答

  • 本文由 Chrome 软件工程师 Kent Tamura 撰写。

您可能已经注意到,自 Chrome 20 起,Google Chrome 就支持日期选择器。只需将 input 元素的 type 属性设置为 date,用户就可以点击箭头按钮,Chrome 就会弹出一个漂亮的日历 widget。

我们收到了开发者提供的大量反馈,因此想在本文中澄清一些关于如何充分利用日期选择器的问题。

语言区域如何影响输入值的日期格式?

用户可以在 input[type=date] 的文本字段中输入日期值,并将框中的日期格式显示为灰色文本。此格式从操作系统的设置中获取。

“日期格式”屏幕

网络作者无法更改日期格式,因为目前没有指定格式的标准。

将输入值发送到服务器时如何表示?

从 HTTP 请求(例如 GET / POST)中的 input[type=date] 解读出的日期值的格式为 yyyy-mm-dd

输入值返回的格式是什么?

无论呈现格式如何,input.value 始终返回 yyyy-mm-dd

输入值接受哪种格式?

以编程方式设置 input.value 时,该值仅接受 yyyy-mm-dd 样式,无论初始值和 JavaScript 注入值的呈现格式如何。

如何更改日期选择器的外观?

您目前无法设置日期选择器的外观样式。在 WebKit 中,我们之前提供了使用 -webkit-appearance CSS 属性或 ::-webkit-foo 伪类选择器为表单控件设置样式的多种方法。不过,日历弹出式窗口在 WebKit 中未提供此方式,因为它与文档是相互独立的(例如 <select> 的弹出式菜单),而且目前还没有制定有关如何控制其子元素的样式的标准。

如何避免 jQuery 日期选择器与原生日期选择器之间发生冲突?

如果您在 Google Chrome 中尝试过在 input[type=date] 上使用 jQuery Datepicker,您可能会注意到 jQuery 界面和原生日历弹出式窗口中的日历重叠。如果您想在所有平台上应用 jQuery Datepicker,请使用 input[type=text] 而非 input[type=date]。不仅 Google Chrome,iOS Safari、BlackBerry 浏览器和 Opera 也都有自己的 input[type=date] 界面,目前无法使用 input[type=date] 在所有平台上实现统一的界面。 如果您只想在不支持 input[type=date] 的平台上应用 jQuery Datepicker,可以使用 Modernizr 或以下代码:

var isDateInputSupported = function(){
var elem = document.createElement('input');
elem.setAttribute('type','date');
elem.value = 'foo';
return (elem.type == 'date' && elem.value != 'foo');
}

if (!isDateInputSupported())  // or.. !Modernizr.inputtypes.date
    $('input[type="date"]').datepicker();