摘要

  • datalist 借助 list 属性向可编辑的 input 提供建议值,用户仍可输入符合字段规则的其他值。
  • 作者准备选项,浏览器决定如何展示与筛选,最终写进字段的是用户选择或键入的值。

有些网页表单像拿着印章的办事员:请从这几格里选一格,特殊情况下次再说。datalist 更像把几张常见答案卡放在桌上,再把笔递给来访者。作者列出可能的答案,浏览器在输入框旁展示,读者想用就点,想自己写就继续打字。这个动作很小,却把“我帮你猜”和“我替你决定”分开了。

W3C 2010 年 3 月首次公开的 HTML 标记草案把 datalist 标为新元素,描述为给其他控件准备预设选项的集合。文档还允许在其中放给旧浏览器看的后备内容。那是一个网页要同时照顾新旧浏览器的时期:标准一边教新机器递答案卡,一边让旧机器仍能读到有用的文字。新功能的门槛不能只留给刚升级的人。

2011 年的 W3C 标记参考继续说它是“其他控件”的选项来源。关键恰恰在“其他”二字:datalist 存建议,input 收回答。作者管理一份清单,读者管理自己的输入。表单可以认得一百个常见地名,也得给第一百零一个地名留位置。把建议清单当成世界地图,最后会发现地图边缘住着真实的人。

现行 HTML 标准的表单章节规定,datalist 里未被禁用且值非空的 option 才算建议。一个建议可以同时有值和标签。输入框通过 list 属性指向对应 ID。标签负责让人看懂,值负责在选择后进入字段。这个区分很实际:界面上可写清楚名称,系统里可保存更稳定的值;两者各司其职。

现行输入规则也给浏览器留了工作:用户编辑时应提供建议;列表太长时可筛选,并应同时匹配标签和值。规范还提到 Unicode 规范化与大小写处理。同一个看起来相同的字词,键盘可能敲出不同的底层编码。好的建议框会尽量认出人想找什么,而不是让人先学会清单管理员的拼写习惯。

读者点选某条建议,浏览器就像他亲手输入那样把值放进框里。读者另写一个可接受的答案,也走同一个输入框。字段类型和通常的校验规则继续负责判定可否提交。常见目的地可以让人少打几个字,清单之外的小城仍有机会被写进来。便捷的近路与真正的选择权,在这里没有必要打架。

这是一笔分工清楚的交易:作者猜测,浏览器排版,读者落笔。封闭菜单适合答案确实只有那几项的问题;生活里的许多问题没有参加过设计会议。datalist 的聪明之处,就是给常见答案开快车道,同时不在路口立一堵墙。网页终于学会提建议时收住语气。