使用Datalist 实现 Input 输入框历史记录

1. 背景介绍


我们时常在<input />获取焦点时,发现有些<input />会自动把之前输入过的历史记录展示出来,例如像这样的:


但是呢,有些<input />又不会啊,查阅资料后,总结出以下三种情况:

为了提供自动完成功能,用户代理可能需要<input>/<select>/<textarea> 元素才能:
1. 具有 name 和/或 id 属性
2. 成为 <form> 的后代
3. 具有 submit 按钮的表单

详见《The HTML 自动完成属性》,这边不在做过多讲述,因为今天的重点不在这里。

2. 如何配置历史记录值


方式一(不推荐)

你可以在<input />onfoucs事件,手动给它弄出个弹框,再将预先想要选择的options罗列出来,然后点击每个值触发的onclick事件,再给<input />设置值。
好像大体上实现了这个功能,但是成本太大了,还有一系列css样式,全部需要自己写。
so,deprecate it !!!

方式二(推荐)
<label>Name</label><input id="country_name" name="country_name" type="text" list="city" />
<datalist id="city">
    <option value="中国 北京" />
    <option value="中国 上海" />
    <option value="中国 广州" />
    <option value="中国 深圳" />
    <option value="中国 东莞" />
</datalist>

兴致勃勃拿去代码一试,看到效果如下:

一脸苦恼,怎么出现了一个奇怪的三角形?怎么还出现以前的输入框的历史记录了?

解决方案一并给你~

  1. 解决输入框以前的历史记录(给input添加autocomplete属性,值为off)
    <input autocomplete="off" />
  2. 解决三角形(在你的style文件里添加以下样式)
    input::-webkit-calendar-picker-indicator{ display: none; -webkit-appearance: none; }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,197评论 0 0
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,554评论 0 13
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,539评论 0 5
  • 在我们程序员日常的工作当中,经常会遇到一些让人头疼的槽点,小编也是经常遇到,今天就给大家分享如何让输入框听话的技巧...
    小猿圈IT教育阅读 544评论 1 0
  • 问题探究 1. ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱: 原因:当页input存在于吸顶...
    郁南阅读 1,723评论 0 2