前几天我看到了一个 HTML5 日期输入,它在右侧有一个下拉箭头,我已经习惯于点击它来显示一个日历日期选择器,从中选择日期。
通常,它看起来像这样

<input type="date">
我以前见过一些变体,比如当你使用星期输入而不是日期时

<input type="week">
但我以前从未见过这个

事实证明,当您将<datalist>
应用于这种类型的输入时,就会得到它!谁知道呢!
格式如下
<input list="days" type="date">
<datalist id="days">
<option label="Chris' Birthday">1980-08-26</option>
<option label="Apollo 11 Moon Landing">1969-07-20</option>
<option label="DDay">1944-06-06</option>
</datalist>
每个选项的值只需要是输入的有效值,否则它们就不会显示。
浏览器支持
据我了解,规范没有规定 HTML5 输入类型的任何特定 UI 要求。如果浏览器想要构建一个日期选择器,很好,但如果不这样做并不违反规范。因此,这种额外的 UI 增强功能也不是必需的。我之所以提到这一点,是因为这里缺少“支持”并不表示浏览器做得不好。
这些花哨的 datalist 输入似乎主要是 Blink 的特性。
快速检查一下**最新版本的浏览器**,仅测试带有datalist
的input type="date"
- Chrome 38 = 可用
- Opera 23 = 可用
- Safari 8.0 = 不支持 input type=”date”
- Firefox 32 = 不支持 input type=”date”
- Internet Explorer 11 = 不支持 input type=”date”
- iOS 8.1 = 日期可用/datalist 不可用(见截图)
- Android 5 = 可用(见截图)
- Opera Mobile 11.5 = 日期可用/datalist 不可用
“支持”再次意味着“不做任何特殊处理”——但会回退到可用的文本输入。


这就是这类功能的症结所在。如果它只是一个你可以提供的、但不是至关重要的细微功能,那就使用它,并将其视为渐进增强。如果对您的网站的所有用户来说,选择推荐选项的 UI 绝对至关重要,并且您支持不支持此功能的浏览器,则您需要一个 polyfill 或自定义解决方案。
其他类型
日期并非唯一可以享受到乐趣的类型!在整理这些内容时,我偶然发现了 Eiji Kitamura 的 综合测试页面,其中包含所有这些内容。datalist
不仅适用于text
和date
输入,还适用于所有类型的date
输入以及color
和range
!
type="range"




type="color"



这是一个很酷的概念,感谢分享。
这让我有点震惊!很棒的发现,Chris!
“标签”是对我们输入日期方式的重大改进,但我认为不支持浏览器的回退效果并不好,只是普通的文本输入。Firefox 应该能够支持如此简单的事情..关于备选日期选择器(非 jQuery UI)有什么建议吗?
KendoUI
哇,太棒了:D
@Thore Cardel
这是使用 polyfill 的相同 datalist 页面
http://afarkas.github.io/webshim/demos/demos/webforms/datalist-experiment.html?polyfillall
最新版本的 Firefox 是 33。只是说一下……
很棒的技巧,很想知道 datalist 的自定义程度。无论如何,在它的基本形式中,对最终用户来说是一个巨大的胜利……尤其是在移动设备上
太棒了!有人知道如何在日期选择器上更改语言吗?我尝试声明它,但它仍然显示为英文。
抱歉,我似乎无法转义代码:html lang=”fr”
由于日期选择器是浏览器小部件,它可能与系统语言匹配而不是页面语言。
来自 HTML5 Rocks
有趣的是,UI 完全不在规范中……我从未真正想过这个问题。这很有道理,但也似乎有点危险……我们已经有了足够多的碎片需要处理。:P 但我喜欢你“将其视为渐进增强”的观点。感谢总结!
很高兴订阅您的列表!
谢谢分享
//我希望所有内容都能正确格式化,因为预览不起作用……开始吧。
我决定在 IE.x 中运行一些测试,我的结果喜忧参半
**IE11 和 IE10:** 部分支持,但非常有缺陷。这两个浏览器对这种类型的输入的行为完全相同。当您点击输入字段时,datalist 会起作用(您可以看到下拉菜单)
但只显示 option 元素中的标签,而不显示值。输入控件也没有显示。
屏幕截图
http://imagizer.imageshack.com/img674/9082/LmBZqa.png
http://imagizer.imageshack.com/img674/5867/2RkAsW.png
**IE9:** 无支持+。标签直接打印在输入字段旁边。Option 元素和输入字段都具有样式(红色背景)。
屏幕截图
http://imagizer.imageshack.com/img537/8379/RK4dNA.png
**IE8:** 完全不支持。标签直接打印在输入字段旁边,除了输入字段之外,没有任何样式。
屏幕截图
http://imagizer.imageshack.com/img661/2075/dIjmAg.png
这是我使用的标记
这确实可以帮助提高转化率,尤其是在触摸设备上。我个人认为文本输入的默认回退效果并不好。
很遗憾,这在“. 方面不起作用。能够控制用户可以跳跃的数字将非常酷。
没关系,似乎确实可以,只要数据列表只包含整数。
另外,我认为您的评论部分有时会省略
inline
代码……很棒的代码,我正在使用 Chrome 浏览器,我尝试了这段日期格式的代码……运行良好……简单易用。如何创建带有边框属性的 HTML 表格?
您可以将这些日期作为示例。;-)
通过 html5
我不知道数据列表有什么用。谢谢! :)