Menu

HTML input 类型:input 标签的全部 22 种类型

HTML <input> 标签的所有类型一次看全:text、email、password、number、range、日期和时间、color、file、hidden 等等,包括每种类型会验证什么、在手机上弹出哪种键盘,以及它们共用的属性。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

input 标签及其类型

<input> 是一个表单字段,它的 type 属性决定字段的种类。同一个标签可以做成文本框、滑块、日期选择器或颜色选择器。试试下面的每个字段,然后点击 Submit,看看表单会发送什么:

<input> 是空元素,所以没有结束标签。它的 name 是发送值时使用的键名,value 是初始值。缺少 type 或拼错时,得到的是普通文本框。

所有 HTML input 类型

type是什么说明
text单行文本默认值
password以圆点显示的文本本身不加密;要通过 HTTPS 发送
email电子邮件地址验证格式;手机键盘上有 @ 键
url网址必须以 https:// 这样的协议开头
tel电话号码手机上弹出拨号键盘,不检查格式
search搜索框通常会显示清除按钮
number数字增减按钮,min、max、step
range滑块本身就不精确;值是一个数字
date日期值为 YYYY-MM-DD
time一天中的时间值为 HH:MM(24 小时制)
datetime-local日期和时间,不带时区值为 YYYY-MM-DDTHH:MM
month年和月并非所有浏览器都支持
week年和周数并非所有浏览器都支持
color颜色选择器值为小写的 #rrggbb
checkbox开关式的勾选框参见 HTML 复选框
radio一组选项中选一个参见 HTML 单选按钮
file文件选择器accept、multiple
hidden发送但不显示的值用于 ID 和令牌
submit提交按钮<button type="submit"> 更灵活
reset重置按钮很少是好主意
button本身不做任何事的按钮配合 JavaScript 使用
image以图片形式显示的提交按钮还会发送点击坐标

文本类类型与手机键盘

在电脑上,email、url、tel、search 和 text 看起来都是文本框。区别在于验证,以及在手机上弹出哪种键盘。这个示例中,边框会根据浏览器对值的判断变成绿色或红色:

  • 对浏览器来说,ada@example 是有效的邮箱:它只检查有文字、有 @、有域名,并不检查域名中是否有点。真正的检查在服务器上进行。
  • example.com 不是有效的 url,因为它没有协议。https://example.com 才是。
  • tel 接受任何内容。各国的电话格式差别太大,所以没有内置检查;需要的话就加上 pattern。
  • inputmode="numeric" 让手机弹出数字键盘,又没有 type="number" 的那些问题,所以它是邮政编码、一次性验证码和银行卡号的正确选择。

number 和 range

二者都接受 min、max 和 step。number 用于精确的值;range 是滑块,适合对具体数字要求不高的值。range 滑块不显示数字,所以要搭配一个 <output>:

number 的 step 默认为 1,所以没有写 step="0.01" 的价格字段在提交表单时会拒绝 4.99。在 JavaScript 中,input.value 始终是字符串;要得到数字,用 input.valueAsNumber。

日期和时间

日期和时间类型会打开浏览器自带的选择器。读者看到的格式跟随其地区设置(09/24/2026、24.09.2026),但值始终是同一种固定格式:

服务器收到的、JavaScript 读到的都是这种固定格式,所以你永远不需要解析“24.09.2026”。min 和 max 也使用同样的格式。datetime-local 不带时区:如果时区很重要,就在服务器上按读者所在的时区进行转换。

color 和 file

accept="image/*" 把文件选择器限制为图片(在手机上还会提供拍照选项);它也接受扩展名,比如 accept=".pdf,.docx"。它只是给选择器的提示,所以要在服务器上检查文件类型。multiple 允许选择多个文件。真正上传文件时,表单上还需要 method="post" 和 enctype="multipart/form-data"。

用 datalist 提供建议

<datalist> 给文本框提供一组建议,同时仍然允许输入任意值。用 list 属性把它们关联起来:

在字段中输入“ja”,就能看到匹配的建议。与 select 不同,读者可以输入列表中没有的值。

适用于 input 的属性

属性作用
name提交值时使用的键名
value初始值
placeholder字段为空时显示的提示(不是标签)
required提交前必须填写
disabled不能使用,也不会被提交
readonly不能编辑,但会被提交
autocomplete自动填充的内容:email、name、current-password、one-time-code、off
min、max、step数字、范围、日期和时间的限制
minlength、maxlength文本类类型的长度限制
pattern整个值必须匹配的正则表达式
inputmode手机上显示哪种键盘:numeric、decimal、email、tel、url
list某个 <datalist> 的 id
multiple多个值,用于 email 和 file
acceptfile 允许的文件类型

常见错误

  • 电话号码、邮政编码或银行卡号用 type="number"。 它们不是数量。用 tel,或者 text 加 inputmode="numeric"。
  • 价格字段没有写 step="0.01"。 小数值会验证失败。
  • 把 placeholder 当作标签。 读者一开始输入它就消失了。
  • 靠 accept 或 type="email" 保证安全。 它们只是方便用户;服务器还要再检查一遍。
  • 使用 type="month" 或 type="week" 却没有后备方案。 有些浏览器只会显示普通文本框。
  • 写了结束标签 </input>。 <input> 是空元素。

常见问题

HTML 中有多少种 input 类型?

22 种:button、checkbox、color、date、datetime-local、email、file、hidden、image、month、number、password、radio、range、reset、search、submit、tel、text、time、url 和 week。未知或缺失的类型会按 text 处理。

HTML 中 input 的默认类型是什么?

text。没有 type 的 <input>,或者类型是浏览器不认识的,都是单行文本框。

电话号码或邮政编码应该用 type="number" 吗?

不应该。number 用于数量:它会加上增减按钮,而且会拒绝电话号码中的 +、空格和连字符。电话号码用 type="tel";邮政编码、银行卡号这类代码用 type="text" 加上 inputmode="numeric"。

input type date 使用什么格式?

无论读者在屏幕上看到什么格式,值始终是 YYYY-MM-DD,例如 2026-09-24。显示格式跟随读者的地区设置;提交的值和脚本读到的值则不会变。

input 标签需要结束标签吗?

不需要。<input> 是空元素:写成 <input type="text" name="city">。写结束标签 </input> 是无效的,<input /> 中的自闭合斜杠是允许的,但没有任何作用。

Coddy 编程语言插图

和 Coddy 一起学编程

开始