<input>:输入(表单输入)元素
<input> HTML 元素用于在基于 Web 的表单中创建交互式控件,以便从用户那里接收数据;根据设备和 用户代理,可以使用各种类型的输入数据和控件小部件。由于输入类型和属性的组合数量众多,<input> 元素是 HTML 中功能最强大、最复杂的元素之一。
试一试
<input> 类型
<input> 的工作方式因其 type 属性的值而异,因此不同类型在各自的参考页面中进行了介绍。如果未指定此属性,则采用默认类型 text。
可用的类型如下所示
| 类型 | 描述 | 基本示例 |
|---|---|---|
| button | 一个没有默认行为的按钮,显示 value 属性的值,默认为空。 |
|
| checkbox | 一个复选框,允许选择/取消选择单个值。 |
|
| color | 用于指定颜色的控件;在支持的浏览器中激活时打开颜色选择器。 |
|
| date | 用于输入日期(年、月和日,不含时间)的控件。在支持的浏览器中激活时,打开日期选择器或用于年、月、日的数字滚轮。 |
|
| datetime-local | 用于输入日期和时间,不含时区的控件。在支持的浏览器中激活时,打开日期选择器或用于日期和时间组件的数字滚轮。 |
|
用于编辑电子邮件地址的字段。看起来像 text 输入,但在支持的浏览器和具有动态键盘的设备中具有验证参数和相关键盘。 |
|
|
| file | 允许用户选择文件的控件。使用 accept 属性定义控件可以选择的文件类型。 |
|
| hidden | 一个不显示但其值会提交到服务器的控件。下一列中有一个示例,但它是隐藏的! | |
| image | 一个图形 submit 按钮。显示由 src 属性定义的图像。如果图像 src 丢失,则显示 alt 属性。 |
|
| month | 用于输入月份和年份,不含时区的控件。 |
|
| number | 用于输入数字的控件。显示一个微调器并添加默认验证。在某些具有动态键盘的设备中显示数字键盘。 |
|
| password | 一个单行文本字段,其值会被隐藏。如果站点不安全,将提醒用户。 |
|
| radio | 一个单选按钮,允许从具有相同 name 值的多个选项中选择一个值。 |
|
| range | 用于输入数字的控件,其确切值并不重要。显示为范围小部件,默认为中间值。与 min 和 max 结合使用以定义可接受值的范围。 |
|
| reset | 一个将表单内容重置为默认值的按钮。不推荐使用。 |
|
| search | 一个用于输入搜索字符串的单行文本字段。输入值中的换行符会自动删除。在支持的浏览器中可能包含一个用于清除字段的删除图标。在某些具有动态键盘的设备上显示搜索图标而不是回车键。 |
|
| submit | 一个提交表单的按钮。 |
|
| tel | 用于输入电话号码的控件。在某些具有动态键盘的设备中显示电话键盘。 |
|
| text | 默认值。一个单行文本字段。输入值中的换行符会自动删除。 |
|
| time | 用于输入不含时区的时间值的控件。 |
|
| url | 用于输入 URL 的字段。看起来像 text 输入,但在支持的浏览器和具有动态键盘的设备中具有验证参数和相关键盘。 |
|
| week | 用于输入由周年份和周数组成的日期,不含时区的控件。 |
|
| 已弃用的值 | ||
datetime 已弃用 |
用于输入基于 UTC 时区的日期和时间(小时、分钟、秒和小数秒)的控件。 |
|
属性
<input> 元素之所以如此强大,是因为它的属性;type 属性(上面有示例描述)是最重要的属性。由于每个 <input> 元素(无论类型如何)都基于 HTMLInputElement 接口,因此从技术上讲,它们共享完全相同的属性集。但是,实际上,大多数属性仅对特定子集的输入类型有效。此外,某些属性影响输入的方式取决于输入类型,以不同的方式影响不同的输入类型。
本节提供了一个表格,列出了所有属性及其简要描述。此表格之后是一个列表,更详细地描述了每个属性,以及它们与哪些输入类型相关联。大多数或所有输入类型共有的属性将在下面更详细地定义。特定输入类型独有的属性——或所有输入类型共有的属性,但在特定输入类型上使用时具有特殊行为——将在这些类型的页面上进行说明。
<input> 元素的属性包括全局 HTML 属性,此外还有:
| 属性 | 类型(s) | 描述 |
|---|---|---|
accept |
file |
文件上传控件中预期文件类型的提示 |
alt |
image |
图像类型的 alt 属性。辅助功能必填 |
autocapitalize |
除 url、email 和 password 之外的所有类型 |
控制输入文本的自动大写。 |
autocomplete |
除 checkbox、radio 和按钮之外的所有类型 |
表单自动填充功能的提示 |
capture |
file |
文件上传控件中的媒体捕获输入方法 |
checked |
checkbox、radio |
命令或控件是否已选中 |
dirname |
hidden、text、search、url、tel、email |
用于在表单提交中发送元素方向性的表单字段名称 |
disabled |
所有类型 | 表单控件是否已禁用 |
form |
所有类型 | 将控件与表单元素关联 |
formaction |
image、submit |
用于表单提交的 URL |
formenctype |
image、submit |
用于表单提交的表单数据编码类型 |
formmethod |
image、submit |
用于表单提交的 HTTP 方法 |
formnovalidate |
image、submit |
绕过表单控件验证以进行表单提交 |
formtarget |
image、submit |
表单提交的浏览上下文 |
height |
image |
与 <img> 的 height 属性相同;垂直尺寸 |
list |
除 hidden、password、checkbox、radio 和按钮之外的所有类型 |
<datalist> 自动完成选项的 id 属性的值 |
max |
date、month、week、time、datetime-local、number、range |
最大值 |
maxlength |
text、search、url、tel、email、password |
value 的最大长度(字符数) |
min |
date、month、week、time、datetime-local、number、range |
最小值 |
minlength |
text、search、url、tel、email、password |
value 的最小长度(字符数) |
multiple |
email、file |
布尔值。是否允许多个值 |
name |
所有类型 | 表单控件的名称。作为名称/值对的一部分与表单一起提交 |
pattern |
text、search、url、tel、email、password |
value 必须匹配的模式才能有效 |
placeholder |
text、search、url、tel、email、password、number |
当表单控件未设置值时显示的文本 |
popovertarget |
button |
将 <input type="button"> 指定为弹出窗口元素的控件 |
popovertargetaction |
button |
指定弹出窗口控件应执行的操作 |
readonly |
除 hidden、range、color、checkbox、radio 和按钮之外的所有类型 |
布尔值。该值不可编辑 |
required |
除 hidden、range、color 和按钮之外的所有类型 |
布尔值。表单要可提交,则需要一个值或必须选中该值 |
size |
text、search、url、tel、email、password |
控件的大小 |
src |
image |
与 <img> 的 src 属性相同;图像资源的地址 |
step |
date、month、week、time、datetime-local、number、range |
有效的增量值 |
type |
所有类型 | 表单控件的类型 |
value |
除 image 之外的所有类型 |
控件的值。在 HTML 中指定时,对应于初始值 |
width |
image |
与 <img> 的 width 属性相同 |
在标准属性的描述之后,列出了一些其他非标准属性。
单个属性
accept-
仅对
file输入类型有效,accept属性定义了在file上传控件中可以选择哪些文件类型。请参阅 file 输入类型。 alt-
仅对
image按钮有效,alt属性为图像提供备用文本,如果图像src丢失或无法加载,则显示属性的值。请参阅 image 输入类型。 autocapitalize-
控制输入文本是否自动大写,以及如果自动大写,则以何种方式大写。有关更多信息,请参阅
autocapitalize全局属性页面。 autocomplete-
(**不是**布尔属性!)
autocomplete属性将其值作为以空格分隔的字符串,该字符串描述输入应提供哪种类型的自动完成功能(如果有)。自动完成的典型实现会调回在同一输入字段中输入的先前值,但可能存在更复杂的自动完成形式。例如,浏览器可以与设备的联系人列表集成以在电子邮件输入字段中自动完成email地址。有关允许的值,请参阅autocomplete。autocomplete属性在hidden、text、search、url、tel、email、date、month、week、time、datetime-local、number、range、color和password上有效。此属性对不返回值或文本数据的输入类型没有影响,对除checkbox、radio、file或任何按钮类型之外的所有输入类型都有效。有关其他信息,包括有关密码安全性和
autocomplete在hidden上与其他输入类型略有不同的信息,请参阅autocomplete属性。 autofocus-
如果存在,则表示该输入应在页面加载完成时(或包含该元素的
<dialog>已显示时)自动获得焦点的布尔属性。注意:具有
autofocus属性的元素可能会在DOMContentLoaded事件触发之前获得焦点。文档中最多只能有一个元素具有
autofocus属性。如果放在多个元素上,则第一个具有该属性的元素会获得焦点。autofocus属性不能用于类型为hidden的输入,因为隐藏的输入无法聚焦。警告:自动聚焦表单控件可能会让使用屏幕阅读器技术的视障人士和认知障碍人士感到困惑。分配
autofocus时,屏幕阅读器会“传送”其用户到表单控件,而不会事先警告他们。在应用
autofocus属性时,请仔细考虑辅助功能。自动聚焦控件可能会导致页面在加载时滚动。焦点也可能导致某些触摸设备上的动态键盘显示。虽然屏幕阅读器会宣布接收焦点的表单控件的标签,但屏幕阅读器不会在标签之前宣布任何内容,并且小型设备上的有视力用户同样会错过先前内容创建的上下文。 capture-
在 HTML 媒体捕获规范中引入,仅对
file输入类型有效,capture属性定义了应使用哪种媒体(麦克风、视频或相机)来捕获新文件以在支持的情况下使用file上传控件上传。请参阅 file 输入类型。 checked-
对
radio和checkbox类型都有效,checked是一个布尔属性。如果在radio类型上存在,则表示该单选按钮是同一名称单选按钮组中当前选中的一个。如果在checkbox类型上存在,则表示该复选框在默认情况下已选中(页面加载时)。它不指示此复选框当前是否已选中:如果复选框的状态发生更改,则此内容属性不会反映更改。(只有HTMLInputElement的checkedIDL 属性 会更新。)注意:与其他输入控件不同,复选框和单选按钮的值仅在当前
checked时包含在提交的数据中。如果是,则会提交选中控件的名称和值(s)。例如,如果一个名为
fruit的复选框的value为cherry,并且该复选框已选中,则提交的表单数据将包含fruit=cherry。如果复选框未激活,则它根本不会在表单数据中列出。复选框和单选按钮的默认value为on。 dirname-
对
hidden、text、search、url、tel和email输入类型有效,dirname属性支持提交元素的方向性。包含时,表单控件将提交两个名称/值对:第一个是name和value,第二个是dirname属性的值作为名称,值为浏览器设置的ltr或rtl。html<form action="page.html" method="post"> <label> Fruit: <input type="text" name="fruit" dirname="fruit-dir" value="cherry" /> </label> <input type="submit" /> </form> <!-- page.html?fruit=cherry&fruit-dir=ltr -->提交上面的表单时,输入将导致发送
fruit=cherry的name/value对和fruit-dir=ltr的dirname/方向对。有关更多信息,请参阅dirname属性。 disabled-
如果存在,则表示用户不应该能够与输入交互的布尔属性。禁用的输入通常以较暗的颜色或其他某种形式的指示来呈现,表示该字段不可用。
具体来说,禁用的输入不会接收
click事件,并且禁用的输入不会与表单一起提交。注意:虽然规范不要求,但 Firefox 默认情况下会 保留
<input>在页面加载之间的动态禁用状态。使用autocomplete属性来控制此功能。 form-
指定输入关联的
<form>元素(即其表单所有者)的字符串。如果存在,此字符串的值必须与同一文档中<form>元素的id匹配。如果未指定此属性,则<input>元素将与最近的包含表单(如果有)关联。form属性允许您将输入放置在文档中的任何位置,但将其包含在文档中其他位置的表单中。注意:一个输入只能与一个表单关联。
formaction-
仅对
image和submit输入类型有效。有关更多信息,请参阅 submit 输入类型。 formenctype-
仅对
image和submit输入类型有效。有关更多信息,请参阅 submit 输入类型。 formmethod-
仅对
image和submit输入类型有效。有关更多信息,请参阅 submit 输入类型。 formnovalidate-
仅对
image和submit输入类型有效。有关更多信息,请参阅 submit 输入类型。 formtarget-
仅对
image和submit输入类型有效。有关更多信息,请参阅 submit 输入类型。 height-
仅对
image输入按钮有效,height是要显示的图像文件的高度,以表示图形提交按钮。请参阅 image 输入类型。 id-
对所有元素(包括所有输入类型)都有效的全局属性,它定义了一个唯一标识符 (ID),该标识符在整个文档中必须唯一。其目的是在链接时识别元素。该值用作
<label>的for属性的值,以将标签与表单控件链接。请参阅<label>。 inputmode-
对所有元素都有效的全局值,它为浏览器提供有关在编辑此元素或其内容时使用的虚拟键盘配置类型的提示。值包括
none、text、tel、url、email、numeric、decimal和search。 list-
赋予
list属性的值应为位于同一文档中的<datalist>元素的id。<datalist>提供了一个预定义值列表,以建议用户为此输入使用。列表中与type不兼容的任何值都不会包含在建议的选项中。提供的值是建议,而不是要求:用户可以选择此预定义列表或提供其他值。它在
text、search、url、tel、email、date、month、week、time、datetime-local、number、range和color上有效。根据规范,
hidden、password、checkbox、radio、file或任何按钮类型都不支持list属性。根据浏览器,用户可能会看到建议的自定义调色板、沿范围的刻度标记,甚至像
<select>一样打开的输入,但允许使用未列出的值。查看 其他输入类型的浏览器兼容性表。请参阅
<datalist>元素。 max-
对
date、month、week、time、datetime-local、number和range有效,它定义了允许值范围内的最大值。如果输入到元素中的value超过此值,则元素将无法通过 约束验证。如果max属性的值不是数字,则该元素没有最大值。有一个特殊情况:如果数据类型是周期性的(例如日期或时间),则
max的值可能低于min的值,这表示范围可能会环绕;例如,这允许您指定从晚上 10 点到凌晨 4 点的时间范围。 maxlength-
对
text、search、url、tel、email和password有效,它定义了用户可以输入到字段中的最大字符串长度(以 UTF-16 代码单元为单位)。这必须是 0 或更高的整数值。如果未指定maxlength或指定了无效值,则字段没有最大长度。此值还必须大于或等于minlength的值。如果输入到字段中的文本长度超过
maxlengthUTF-16 代码单元,则输入将无法通过 约束验证。默认情况下,浏览器会阻止用户输入超过maxlength属性允许的字符数。仅当用户更改值时才会应用约束验证。有关更多信息,请参阅 客户端验证。 min-
对
date、month、week、time、datetime-local、number和range有效,它定义了允许值范围内的最小负值。如果输入到元素中的value小于此值,则元素将无法通过 约束验证。如果min属性的值不是数字,则该元素没有最小值。此值必须小于或等于
max属性的值。如果min属性存在但未指定或无效,则不会应用任何min值。如果min属性有效且非空值小于min属性允许的最小值,则约束验证将阻止表单提交。有关更多信息,请参阅客户端验证。有一个特殊情况:如果数据类型是周期性的(例如日期或时间),则
max的值可能低于min的值,这表示范围可能会环绕;例如,这允许您指定从晚上 10 点到凌晨 4 点的时间范围。 minlength-
适用于
text、search、url、tel、email和password,它定义了用户可以在输入字段中输入的最小字符串长度(以UTF-16代码单元计)。这必须是一个非负整数,且小于或等于maxlength指定的值。如果没有指定minlength,或指定了无效值,则输入没有最小长度。如果输入到字段中的文本长度少于
minlength个UTF-16代码单元,则输入将导致约束验证失败,从而阻止表单提交。只有当用户更改值时才会应用约束验证。有关更多信息,请参阅客户端验证。 multiple-
如果设置了布尔型
multiple属性,则表示用户可以在电子邮件窗口小部件中输入以逗号分隔的电子邮件地址,或者可以使用file输入选择多个文件。请参阅电子邮件和文件输入类型。 name-
一个字符串,用于指定输入控件的名称。当表单数据提交时,此名称将与控件的值一起提交。
将
name视为必填属性(即使它不是)。如果输入没有指定name,或name为空,则输入的值不会随表单一起提交!(禁用的控件、未选中的单选按钮、未选中的复选框和重置按钮也不会发送)。有两种特殊情况
_charset_:如果用作类型为hidden的<input>元素的名称,则输入的value将由用户代理自动设置为用于提交表单的字符编码。isindex:出于历史原因,不允许使用名称isindex。
name属性为单选按钮创建了一个独特的行为。同一命名组中的单选按钮一次只能选中一个。选择该组中的任何单选按钮都会自动取消选择该组中当前选中的任何单选按钮。如果提交表单,则该选中的单选按钮的值将与名称一起发送。
当在同一命名组的单选按钮序列中进行Tab键切换时,如果选中了一个按钮,则该按钮将获得焦点。如果它们在源代码中没有分组在一起,如果该组中的一个按钮被选中,则从遇到该组中的第一个按钮开始进行Tab键切换,跳过所有未选中的按钮。换句话说,如果选中了一个按钮,则Tab键切换会跳过该组中未选中的单选按钮。如果没有选中任何按钮,则当到达同一名称组中的第一个按钮时,单选按钮组将获得焦点。
一旦该组中的一个单选按钮获得焦点,使用箭头键将导航到所有具有相同名称的单选按钮,即使这些单选按钮在源代码中没有分组在一起。
当输入元素被赋予一个
name时,该名称将成为拥有表单元素的HTMLFormElement.elements属性的一个属性。如果您有一个name设置为guest的输入和另一个name设置为hat-size的输入,则可以使用以下代码jslet form = document.querySelector("form"); let guestName = form.elements.guest; let hatSize = form.elements["hat-size"];当此代码运行后,
guestName将是guest字段的HTMLInputElement,而hatSize将是hat-size字段的对象。警告:避免为表单元素提供与表单的内置属性相对应的
name,因为您将用对相应输入的引用覆盖预定义的属性或方法。 pattern-
适用于
text、search、url、tel、email和password,pattern属性定义了一个正则表达式,输入的value必须匹配该正则表达式才能通过约束验证。它必须是一个有效的JavaScript正则表达式,如RegExp类型所使用,以及我们在正则表达式指南中所记录的那样;编译正则表达式时会指定'u'标志,以便将模式视为Unicode代码点的序列,而不是ASCII。模式文本周围不应指定正斜杠。如果
pattern属性存在但未指定或无效,则不会应用任何正则表达式,并且此属性将完全被忽略。如果pattern属性有效且非空值与模式不匹配,则约束验证将阻止表单提交。注意:如果使用
pattern属性,请通过在附近包含解释性文本来告知用户预期的格式。您还可以包含一个title属性来解释匹配模式的要求;大多数浏览器会将此标题显示为工具提示。可见的解释对于可访问性是必需的。工具提示是一种增强功能。有关更多信息,请参阅客户端验证。
placeholder-
适用于
text、search、url、tel、email、password和number,placeholder属性为用户提供了一个简短的提示,说明在字段中期望哪种信息。它应该是一个单词或短语,提示预期的数据类型,而不是解释或提示。文本不得包含回车符或换行符。例如,如果一个字段预期捕获用户的姓氏,并且其标签为“姓氏”,则合适的占位符可能是“例如,张三”。注意:
placeholder属性在语义上不如其他解释表单的方法有用,并且可能导致内容出现意外的技术问题。有关更多信息,请参阅标签。 popovertarget-
将
<input type="button">元素转换为弹出窗口控件按钮;将要控制的弹出窗口元素的ID作为其值。有关更多详细信息,请参阅弹出窗口API登录页面。 popovertargetaction-
指定在由控件
<input type="button">控制的弹出窗口元素上执行的操作。可能的值为 readonly-
一个布尔型属性,如果存在,则表示用户不应该能够编辑输入的值。
readonly属性受text、search、url、tel、email、date、month、week、time、datetime-local、number和password输入类型支持。有关更多信息,请参阅HTML属性:
readonly。 required-
required是一个布尔型属性,如果存在,则表示用户必须在提交拥有表单之前为输入指定一个值。required属性受text、search、url、tel、email、date、month、week、time、datetime-local、number、password、checkbox、radio和file输入支持。有关更多信息,请参阅客户端验证和HTML属性:
required。 size-
适用于
email、password、tel、url和text,size属性指定显示输入的多少内容。基本上与使用CSSwidth属性设置相同的结果,但有一些特殊之处。值的实际单位取决于输入类型。对于password和text,它是字符数(或em单位),默认值为20,对于其他类型,它是像素(或px单位)。CSSwidth优先于size属性。 src-
仅适用于
image输入按钮,src是指定要显示的图像文件的URL的字符串,以表示图形提交按钮。请参阅图像输入类型。 step-
适用于
date、month、week、time、datetime-local、number和range,step属性是一个数字,指定值必须遵循的粒度。如果未明确包含
step对于number和range默认为1。- 每个日期/时间输入类型都有一个适合该类型的默认
step值;请参阅各个输入页面:date、datetime-local、month、time和week。
该值必须是一个正数——整数或浮点数——或特殊值
any,这意味着没有隐含的步进,并且允许任何值(除了其他约束,如min和max)。如果未明确设置
any,则number、日期/时间输入类型和range输入类型的有效值等于步进的基础——min值和步进值的增量,直到max值(如果指定)。例如,如果您有
<input type="number" min="10" step="2">,则任何大于或等于10的偶数都是有效的。如果省略,<input type="number">,则任何整数都是有效的,但浮点数(如4.2)无效,因为step默认为1。要使4.2有效,step必须设置为any、0.1、0.2,或者min值必须以.2结尾,例如<input type="number" min="-5.2">注意:当用户输入的数据不符合步进配置时,该值在约束验证中被视为无效,并将匹配
:invalid伪类。有关更多信息,请参阅客户端验证。
tabindex-
全局属性,对所有元素(包括所有输入类型)有效,一个整数属性,指示元素是否可以获取输入焦点(是否可聚焦),以及它是否应该参与顺序键盘导航。由于除类型为hidden的输入外的所有输入类型都是可聚焦的,因此不应在表单控件上使用此属性,因为这样做需要管理文档中所有元素的焦点顺序,如果操作不当,则存在损害可用性和可访问性的风险。
title-
全局属性,对所有元素(包括所有输入类型)有效,包含一个文本,表示与其所属元素相关的建议信息。此类信息通常(但并非必须)可以作为工具提示呈现给用户。标题不应作为表单控件目的的主要解释。相反,请使用
for属性设置为表单控件的id属性的<label>元素。请参阅下面的标签。 type-
一个字符串,指定要渲染的控件类型。例如,要创建复选框,则使用
checkbox值。如果省略(或指定了未知值),则使用输入类型text,创建一个纯文本输入字段。允许的值列在上面的输入类型中。
value-
输入控件的值。当在HTML中指定时,这是初始值,从那时起,可以使用JavaScript访问相应的
HTMLInputElement对象的value属性随时更改或检索它。value属性始终是可选的,但对于checkbox、radio和hidden应视为必需的。 width-
仅适用于
image输入按钮,width是要显示的图像文件的宽度,以表示图形提交按钮。请参阅图像输入类型。
非标准属性
以下非标准属性在某些浏览器上也可用。一般来说,除非不得已,否则应避免使用它们。
| 属性 | 描述 |
|---|---|
autocorrect |
一个字符串,指示自动更正是否为on或off。仅限Safari。 |
incremental |
是否发送重复的search事件以允许在用户仍在编辑字段值时更新实时搜索结果。仅限WebKit和Blink(Safari、Chrome、Opera等)。 |
mozactionhint 已弃用 |
一个字符串,指示当用户在编辑字段时按下Enter或Return键时将执行的操作类型;这用于确定虚拟键盘上该键的适当标签。由于此属性已弃用,请改用 |
orient |
设置范围滑块的方向。仅限Firefox。 |
results |
应在以前搜索查询的下拉列表中显示的项目的最大数量。仅限Safari。 |
webkitdirectory |
一个布尔值,指示是否只允许用户选择一个目录(或多个目录,如果也存在multiple)。 |
autocorrect非标准-
(仅限Safari)。一个字符串,指示在用户编辑此字段时是否激活自动更正。允许的值为
incremental非标准-
布尔型属性
incremental是WebKit和Blink扩展(因此受Safari、Opera、Chrome等支持),如果存在,则告诉用户代理将输入处理为实时搜索。当用户编辑字段的值时,用户代理会将search事件发送到表示搜索框的HTMLInputElement对象。这允许您的代码在用户编辑搜索时实时更新搜索结果。如果未指定
incremental,则只有当用户明确启动搜索(例如,在编辑字段时按下Enter或Return键)时,才会发送search事件。search事件受速率限制,因此不会比实现定义的间隔更频繁地发送。 orient非标准-
类似于影响`
<progress>` 和 `<meter>` 元素的非标准 CSS 属性 `-moz-orient`,`orient` 属性定义了范围滑块的方向。其值包括 `horizontal`,表示范围水平渲染,以及 `vertical`,表示范围垂直渲染。有关创建垂直表单控件的现代方法,请参阅 创建垂直表单控件。 results非标准-
`results` 属性(仅 Safari 支持)是一个数值,允许您覆盖在 `` 元素的原生下拉菜单中显示的先前搜索查询条目最大数量。
该值必须是非负十进制数。如果未提供或提供无效值,则使用浏览器的默认最大条目数。
webkitdirectory非标准-
如果存在,布尔型 `webkitdirectory` 属性表示在文件选择器界面中,用户只能选择目录。有关其他详细信息和示例,请参阅
HTMLInputElement.webkitdirectory。虽然最初仅在基于 WebKit 的浏览器中实现,但 `webkitdirectory` 也可以在 Microsoft Edge 以及 Firefox 50 及更高版本中使用。但是,即使它具有相对广泛的支持,它仍然是非标准的,除非没有其他选择,否则不应使用它。
方法
以下方法由 `HTMLInputElement` 接口提供,该接口表示 DOM 中的 `` 元素。父接口 `HTMLElement`、`Element`、`Node` 和 `EventTarget` 指定的方法也可使用。
checkValidity()-
如果元素的值通过有效性检查,则返回 `true`;否则,返回 `false` 并在元素上触发 `
invalid` 事件。 reportValidity()-
如果元素的值通过有效性检查,则返回 `true`;否则,返回 `false`,在元素上触发 `
invalid` 事件,并且(如果事件未取消)向用户报告问题。 select()-
如果元素的内容可选择,则选择 `` 元素的整个内容。对于没有可选择文本内容的元素(例如视觉颜色选择器或日历日期输入),此方法不执行任何操作。
setCustomValidity()-
设置自定义消息,如果输入元素的值无效,则显示该消息。
setRangeText()-
将输入元素中指定字符范围的内容设置为给定的字符串。可以使用 `selectMode` 参数来控制如何影响现有内容。
setSelectionRange()-
选择文本输入元素中指定的字符范围。对于未呈现为文本输入字段的输入,不执行任何操作。
showPicker()-
显示输入元素的浏览器选择器,该选择器通常在选择元素时显示,但由按钮按下或其他用户交互触发。
stepDown()-
默认情况下,将数字输入的值减少一个单位,或者减少指定数量的单位。
stepUp()-
将数字输入的值增加一个单位或增加指定数量的单位。
CSS
输入作为替换元素,具有一些不适用于非表单元素的功能。有一些 CSS 选择器可以根据其 UI 功能(也称为 UI 伪类)专门定位表单控件。输入元素还可以使用属性选择器按类型进行定位。还有一些属性特别有用。
UI 伪类
| 伪类 | 描述 |
|---|---|
:enabled |
任何当前启用的元素,都可以激活(选择、点击、键入等)或接受焦点,并且还具有禁用状态,在这种状态下,它不能被激活或接受焦点。 |
:disabled |
任何当前禁用的元素,都具有启用状态,这意味着如果它没有被禁用,则可以被激活(选择、点击、键入等)或接受焦点。 |
:read-only |
用户无法编辑的元素 |
:read-write |
用户可以编辑的元素。 |
:placeholder-shown |
当前显示 `placeholder 文本` 的元素,包括具有 `placeholder` 属性且尚未赋值的 `` 和 `<textarea>` 元素。 |
:default |
在一组相关元素中为默认值的表单元素。匹配在页面加载或渲染时已选中的 `复选框` 和 `单选按钮` 输入类型。 |
:checked |
匹配当前选中的 `复选框` 和 `单选按钮` 输入类型(以及 `<select>` 中当前选中的 `<option>`)。 |
:indeterminate |
其不确定属性由 JavaScript 设置为 true 的 `复选框` 元素,当表单中所有具有相同名称值的单选按钮均未选中时 `单选按钮` 元素,以及处于不确定状态的 `<progress>` 元素 |
:valid |
可以应用约束验证并且当前有效的表单控件。 |
:invalid |
已应用约束验证但当前无效的表单控件。匹配其值与属性(例如 `required`、`pattern`、`step` 和 `max`)设置的约束不匹配的表单控件。 |
:in-range |
非空输入,其当前值在 `min` 和 `max` 属性以及 `step` 指定的范围限制内。 |
:out-of-range |
非空输入,其当前值不在 `min` 和 `max` 属性指定的范围限制内,或者不符合 `step` 约束。 |
:required |
已在其上设置 `required` 属性的 ``、`<select>` 或 `<textarea>` 元素。仅匹配可以设置为必需的元素。包含在不可要求元素上的属性不会导致匹配。 |
:optional |
在其上未设置 `required` 属性的 ``、`<select>` 或 `<textarea>` 元素。不匹配不能设置为必需的元素。 |
:blank |
当前没有值的 `` 和 `<textarea>` 元素。 |
:user-invalid |
类似于 `:invalid`,但在失去焦点时激活。匹配无效输入,但仅在用户交互后,例如通过聚焦于控件、离开控件或尝试提交包含无效控件的表单。 |
伪类示例
我们可以根据复选框是否选中来设置复选框标签的样式。在此示例中,我们正在设置紧跟在选中输入后面的 `<label>` 的 `color` 和 `font-weight` 样式。如果 `input` 未选中,我们没有应用任何样式。
input:checked + label {
color: red;
font-weight: bold;
}
属性选择器
::placeholder
默认情况下,占位符文本的外观是半透明或浅灰色。`::placeholder` 伪元素是输入的 `placeholder 文本`。它可以用有限的 CSS 属性子集进行样式设置。
::placeholder {
color: blue;
}
在使用 `::placeholder` 作为选择器的规则中,只能使用适用于 `::first-line` 伪元素的 CSS 属性子集。
appearance
`appearance` 属性允许根据操作系统的主题显示(几乎)任何元素作为平台原生样式,并使用 `none` 值删除任何平台原生样式。
您可以使用 `div {appearance: radio;}` 使 `
设置 `appearance: none` 会删除平台原生边框,但不会删除功能。
caret-color
特定于文本输入相关元素的属性是 CSS `caret-color` 属性,它允许您设置用于绘制文本输入插入点的颜色。
HTML
<label for="textInput">Note the red caret:</label>
<input id="textInput" class="custom" size="32" />
CSS
input.custom {
caret-color: red;
font:
16px "Helvetica",
"Arial",
"sans-serif";
}
结果
field-sizing
`field-sizing` 属性允许您控制表单输入的大小调整行为(即,默认情况下,它们具有默认的首选大小)。此属性允许您覆盖默认行为,使表单控件能够调整大小以适应其内容。
此属性通常用于创建表单字段,这些字段会根据其内容进行收缩包装,并在输入更多文本时增长。这适用于接受直接文本输入的输入类型(例如,`text` 和 `url`),输入类型 `file` 以及 `<textarea>` 元素。
object-position 和 object-fit
在某些情况下(通常涉及非文本输入和专门的界面),`` 元素是一个 `替换元素`。在这种情况下,可以使用 CSS `object-position` 和 `object-fit` 属性调整元素大小及其在框架内位置。
样式
其他功能
标签
标签需要将辅助文本与 `` 关联。`<label>` 元素提供有关表单字段的解释信息,这始终是合适的(除了您可能遇到的任何布局问题之外)。使用 `
关联标签
`` 和 `
仅仅在 `` 元素旁边放置纯文本是不够的。相反,可用性和可访问性需要包含隐式或显式的 `<label>`。
<!-- inaccessible -->
<p>Enter your name: <input id="name" type="text" size="30" /></p>
<!-- implicit label -->
<p>
<label>Enter your name: <input id="name" type="text" size="30" /></label>
</p>
<!-- explicit label -->
<p>
<label for="name">Enter your name: </label>
<input id="name" type="text" size="30" />
</p>
第一个示例不可访问:提示与 `` 元素之间不存在关系。
除了可访问名称之外,标签还为鼠标和触摸屏用户提供了更大的“点击”区域以进行点击或触摸。通过将 `
作为 Web 开发人员,我们必须始终记住,我们不能假设每个人都知道我们知道的所有事情。使用 Web 的人群的多样性(以及您的网站)实际上保证了您网站的一些访客在思维过程和/或环境方面存在一些差异,如果没有清晰且正确呈现的标签,这会导致他们对表单的理解与您大不相同。
占位符不可访问
`placeholder` 属性允许您指定在 `` 元素为空时显示在其内容区域本身内的文本。占位符永远不应该成为理解表单的必要条件。它不是标签,也不应该用作替代品,因为它不是。占位符用于提示输入值应是什么样子,而不是解释或提示。
占位符不仅无法被屏幕阅读器访问,而且一旦用户在表单控件中输入任何文本,或者如果表单控件已具有值,则占位符会消失。具有自动页面翻译功能的浏览器在翻译时可能会跳过属性,这意味着 `placeholder` 可能不会被翻译。
注意:如果可以避免,请不要使用 `placeholder` 属性。如果您需要为 `` 元素设置标签,请使用 `<label>` 元素。
客户端验证
警告:客户端验证很有用,但它不能保证服务器会收到有效数据。如果数据必须采用特定格式,则始终也应在服务器端对其进行验证,并在格式无效时返回 `400 HTTP 响应`。
除了使用 CSS 根据每个输入的当前状态基于 `:valid` 或 `:invalid` UI 状态为输入设置样式外,如上文 `UI 伪类` 部分所述,浏览器还提供了在(尝试)表单提交时的客户端验证。在表单提交时,如果存在任何表单控件无法通过约束验证,则支持的浏览器将在第一个无效的表单控件上显示错误消息;显示基于错误类型的默认消息,或您设置的消息。
某些输入类型和其他属性会限制给定输入的有效值。例如,<input type="number" min="2" max="10" step="2">表示只有数字 2、4、6、8 或 10 是有效的。可能会发生多种错误,包括如果值小于 2 则出现 rangeUnderflow 错误,如果大于 10 则出现 rangeOverflow 错误,如果值在 2 到 10 之间但不是偶数(不符合step属性的要求),则出现 stepMismatch 错误,或者如果值不是数字,则出现 typeMismatch 错误。
对于其可能值域是周期性的输入类型(即,在最大可能值处,值会环绕回到开头而不是结束),max 和 min 属性的值可以反转,这表示允许的值范围从 min 开始,环绕到最小可能值,然后继续直到达到 max。这在日期和时间方面特别有用,例如当您希望允许范围从晚上 8 点到早上 8 点时。
<input type="time" min="20:00" max="08:00" name="overnight" />
特定的属性及其值会导致特定的错误 ValidityState
| 属性 | 相关属性 | 描述 |
|---|---|---|
max |
validityState.rangeOverflow |
当值大于由 max 属性定义的最大值时发生 |
maxlength |
validityState.tooLong |
当字符数大于 maxlength 属性允许的字符数时发生 |
min |
validityState.rangeUnderflow |
当值小于由 min 属性定义的最小值时发生 |
minlength |
validityState.tooShort |
当字符数小于 minlength 属性要求的字符数时发生 |
pattern |
validityState.patternMismatch |
当包含一个具有有效正则表达式的 pattern 属性,并且 value 与其不匹配时发生。 |
required |
validityState.valueMissing |
当存在 required 属性但值为 null 或单选按钮或复选框未选中时发生。 |
step |
validityState.stepMismatch |
值与步长增量不匹配。增量默认为 1,因此如果未包含 step,则 type="number" 上只有整数有效。step="any" 永远不会引发此错误。 |
type |
validityState.typeMismatch |
当值类型不正确时发生,例如电子邮件不包含 @ 或 url 不包含协议。 |
如果表单控件没有 required 属性,则没有值或空字符串无效。即使存在以上属性(required 除外),空字符串也不会导致错误。
我们可以限制我们接受的值,支持的浏览器将本地验证这些表单值,并在表单提交时出现错误时提醒用户。
除了上表中描述的错误之外,validityState 接口还包含 badInput、valid 和 customError 布尔只读属性。Validity 对象包括
validityState.valueMissingvalidityState.typeMismatchvalidityState.patternMismatchvalidityState.tooLongvalidityState.tooShortvalidityState.rangeUnderflowvalidityState.rangeOverflowvalidityState.stepMismatchvalidityState.badInputvalidityState.validvalidityState.customError
对于这些布尔属性中的每一个,值为 true 表示指定的验证失败原因可能是正确的,valid 属性除外,如果元素的值符合所有约束条件,则该属性为 true。
如果发生错误,支持的浏览器将同时提醒用户并阻止表单提交。需要注意的是:如果自定义错误设置为真值(除空字符串或 null 之外的任何内容),则将阻止表单提交。如果没有自定义错误消息,并且其他任何属性都没有返回 true,则 valid 将为 true,并且可以提交表单。
function validate(input) {
let validityState_object = input.validity;
if (validityState_object.valueMissing) {
input.setCustomValidity("A value is required");
} else if (validityState_object.rangeUnderflow) {
input.setCustomValidity("Your value is too low");
} else if (validityState_object.rangeOverflow) {
input.setCustomValidity("Your value is too high");
} else {
input.setCustomValidity("");
}
}
最后一行,将自定义有效性消息设置为空字符串至关重要。如果用户犯了错误,并且设置了有效性,则它将无法提交,即使所有值都有效,直到消息为 null 为止。
自定义验证错误示例
如果您希望在字段验证失败时显示自定义错误消息,则需要使用 <input>(以及相关)元素上可用的 约束验证 API。请看以下表单
<form>
<label for="name">Enter username (upper and lowercase letters): </label>
<input type="text" name="name" id="name" required pattern="[A-Za-z]+" />
<button>Submit</button>
</form>
如果您尝试提交表单且未填写任何有效值或值与 pattern 不匹配,则基本的 HTML 表单验证功能将导致生成默认错误消息。
如果您想改为显示自定义错误消息,可以使用以下 JavaScript 代码
const nameInput = document.querySelector("input");
nameInput.addEventListener("input", () => {
nameInput.setCustomValidity("");
nameInput.checkValidity();
});
nameInput.addEventListener("invalid", () => {
if (nameInput.value === "") {
nameInput.setCustomValidity("Enter your username!");
} else {
nameInput.setCustomValidity(
"Usernames can only contain upper and lowercase letters. Try again!",
);
}
});
该示例的呈现效果如下
简而言之
- 每次输入元素的值发生更改时,我们都会通过
input事件处理程序运行checkValidity()方法来检查输入元素的有效状态。 - 如果值无效,则会引发
invalid事件,并运行invalid事件处理程序函数。在此函数内部,我们使用if ()块确定值无效是因为它为空还是因为它与模式不匹配,并设置自定义有效性错误消息。 - 因此,如果在按下提交按钮时输入值无效,则将显示自定义错误消息之一。
- 如果有效,它将按预期提交。为此,必须取消自定义有效性,方法是使用空字符串值调用
setCustomValidity()。因此,我们每次引发input事件时都会执行此操作。如果您不这样做,并且之前已设置了自定义有效性,则即使输入当前包含有效值,在提交时输入也会注册为无效。
注意:始终在客户端和服务器端验证输入约束。约束验证并不能消除服务器端验证的必要性。旧版浏览器或恶意行为者仍然可以发送无效值。
注意:Firefox 在许多版本中支持专有的错误属性——x-moz-errormessage——允许您以类似的方式设置自定义错误消息。从版本 66 开始已将其移除(请参阅 Firefox bug 1513890)。
本地化
某些 <input> 类型的允许输入取决于区域设置。在某些区域设置中,1,000.00 是有效数字,而在其他区域设置中,输入此数字的有效方式是 1.000,00。
Firefox 使用以下启发式方法来确定用于验证用户输入的区域设置(至少对于 type="number" 而言)
- 尝试元素或其任何父元素上
lang/xml:lang属性指定的语言。 - 尝试任何
Content-LanguageHTTP 标头指定的语言。或者, - 如果未指定,则使用浏览器的区域设置。
无障碍访问
标签
在包含输入时,需要在旁边添加标签,这是辅助功能的要求。这是为了让使用辅助技术的用户能够知道输入的用途。此外,单击或触摸标签会将焦点赋予标签关联的表单控件。这提高了有视力用户的可访问性和可用性,增加了用户可以单击或触摸以激活表单控件的区域。这在单选按钮和复选框方面尤其有用(甚至必要),因为它们很小。有关标签的更多信息,请参阅 标签。
以下是如何在上述样式中将 <label> 与 <input> 元素关联的示例。您需要为 <input> 提供一个 id 属性。然后,<label> 需要一个 for 属性,其值与输入的 id 相同。
<label for="peas">Do you like peas?</label>
<input type="checkbox" name="peas" id="peas" />
尺寸
表单输入等交互式元素应提供足够大的区域,以便于激活它们。这有助于各种人群,包括有运动控制问题的人以及使用非精确输入形式(如手写笔或手指)的人。建议最小交互尺寸为 44×44 CSS 像素。
技术摘要
| 内容类别 |
流内容、列表、可提交、可重置、表单关联元素、短语内容。如果 type 不是 hidden,则为可标记元素、可感知内容。 |
|---|---|
| 允许的内容 | 无;它是一个 空元素。 |
| 标签省略 | 必须有开始标签,并且不能有结束标签。 |
| 允许的父元素 | 任何接受 短语内容 的元素。 |
| 隐式 ARIA 角色 | |
| 允许的 ARIA 角色 |
|
| DOM 接口 | HTMLInputElement |
规范
| 规范 |
|---|
| HTML 标准 # the-input-element |
浏览器兼容性
BCD 表格仅在浏览器中加载