<input type="text">

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

<input> 元素的 text 类型会创建基本的单行文本字段。

试一试

<label for="name">Name (4 to 8 characters):</label>

<input
  type="text"
  id="name"
  name="name"
  required
  minlength="4"
  maxlength="8"
  size="10" />
label {
  display: block;
  font:
    1rem "Fira Sans",
    sans-serif;
}

input,
label {
  margin: 0.4rem 0;
}

value 属性是一个字符串,其中包含文本字段中输入的当前文本。你可以通过 JavaScript 中的 HTMLInputElementvalue 属性来获取它。

js
let theText = myTextInput.value;

如果输入框没有设置验证约束(更多细节请参见验证),那么该值可能是一个空字符串("")。

附加属性

除了全局属性和适用于所有 <input> 元素(不论其类型)的属性之外,文本输入框还支持以下属性。

list

列表属性的值是位于同一文档中的 <datalist> 元素的 id<datalist> 为此输入提供了一个预定义值列表,以供用户建议。列表中与 type 不兼容的任何值都不会包含在建议选项中。提供的值是建议,而不是要求:用户可以从这个预定义列表中选择,也可以提供不同的值。

maxlength

用户可在 text 输入框中输入的最大字符串长度(以 UTF-16 码元为单位)。该值必须为 0 或更高的整数。如果没有指定 maxlength 或指定了无效值,则 text 输入框没有最大长度。该值还必须大于或等于 minlength 的值。

如果字段的文本值长度大于 maxlength UTF-16 代码单元长,则输入将无法通过约束验证。约束验证仅在用户更改值时应用。

minlength

用户可在 text 输入框中输入的最小字符串长度(以 UTF-16 码元为单位)。该值必须是小于或等于 maxlength 指定值的非负整数。如果没有指定 minlength 或指定了无效值,则 text 输入框没有最小长度。

如果字段中输入的文本长度少于 minlength UTF-16 代码单元长,则输入将无法通过约束验证。约束验证仅在用户更改值时应用。

pattern

当指定 pattern 属性时,它是一个正则表达式,输入框的 value 必须与该正则表达式匹配才能通过 约束验证。它必须是有效的 JavaScript 正则表达式,如 RegExp 类型所使用,并记录在我们的正则表达式指南中;在编译正则表达式时指定 'u' 标志,以便将模式视为 Unicode 码点序列,而不是 ASCII。模式文本周围不应指定正斜杠。

如果未指定或指定的模式无效,则不应用正则表达式,并且此属性将完全被忽略。

注意: 使用 title 属性来指定大多数浏览器将作为工具提示显示的文本,以解释匹配模式的要求。您还应该在附近包含其他解释性文本。

更多细节和示例请参见指定一个模式

placeholder

placeholder 属性是一个字符串,它向用户提供一个简短的提示,说明字段中预期哪种信息。它应该是一个词或短语,演示预期的数据类型,而不是解释性消息。文本不能包含回车或换行符。

如果控件的内容具有单一方向性(从左到右从右到左),但需要以相反的方向性呈现占位符,您可以使用 Unicode 双向算法格式字符来覆盖占位符内的方向性;有关更多信息,请参阅如何使用 Unicode 控件处理双向文本

注意:如果可以,请避免使用 placeholder 属性。它在语义上不如其他解释表单的方式有用,并且可能导致内容出现意想不到的技术问题。更多信息请参见 <input> 辅助功能问题

readonly

一个布尔属性,如果存在,则表示该字段不能由用户编辑。但是,其 value 仍然可以通过 JavaScript 代码直接设置 HTMLInputElement value 属性来更改。

注意: 由于只读字段不能有值,因此 required 对同时指定了 readonly 属性的输入没有影响。

size

size 属性是一个数字值,表示输入字段应该有多宽(以字符为单位)。该值必须是一个大于零的数字,默认值为 20。由于字符宽度不同,这可能不完全精确,不应依赖于此;最终的输入可能比指定的字符数更窄或更宽,具体取决于字符和正在使用的字体(font 设置)。

限制用户可以在字段中输入的字符数。它只指定一次大约可以看到多少个字符。要对输入数据的长度设置上限,请使用maxlength 属性。

spellcheck

spellcheck 全局属性用于指示是否为元素启用拼写检查。它可以用于任何可编辑内容,但这里我们主要讨论 spellcheck<input> 元素上的具体用法。spellcheck 的允许值为:

false

禁用此元素的拼写检查。

true

启用此元素的拼写检查。

""(空字符串)或无值

遵循元素的拼写检查默认行为。这可能基于父元素的 spellcheck 设置或其他因素。

如果输入字段未设置 readonly 属性且未禁用,则可以启用拼写检查。

如果用户代理的偏好设置覆盖了该设定,那么读取 spellcheck 返回的值可能不反映控件内拼写检查的实际状态。

使用文本输入框

<input> 元素的 text 类型用于创建基本的单行输入框。当你想让用户输入单行值,并且没有更具体的输入类型可用时(例如,如果是日期URL电子邮件搜索词,你有更好的选择),就应该使用它。

基本示例

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input type="text" id="uname" name="name" />
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

渲染效果如下:

提交时,发送到服务器的数据名/值对将是 name=Chris(如果在提交前输入的值是“Chris”)。你必须记得在 <input> 元素上包含 name 属性,否则文本字段的值将不会包含在提交的数据中。

设置占位符

你可以通过使用 placeholder 属性,在文本输入框内提供一个有用的占位符,它可以提示用户应该输入什么内容。请看下面的例子:

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input
      type="text"
      id="uname"
      name="name"
      placeholder="Lower case, all one word" />
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

你可以在下方看到占位符的渲染效果:

占位符通常以比元素前景色更浅的颜色渲染,并且在用户开始向字段中输入文本时(或者当通过编程方式设置其 value 属性为字段设置值时)会自动消失。

物理输入元素大小

输入框的物理尺寸可以通过 size 属性来控制。通过它,你可以指定文本输入框一次可以显示多少个字符。这会影响元素的宽度,让你能够以字符而不是像素为单位指定宽度。例如,在这个例子中,输入框的宽度是 30 个字符:

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input
      type="text"
      id="uname"
      name="name"
      placeholder="Lower case, all one word"
      size="30" />
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

验证

<input> 元素的 text 类型没有自动验证(因为一个基本的文本输入框需要能够接受任何任意字符串),但有一些客户端验证选项可用,我们将在下面讨论。

注意:HTML 表单验证不能替代确保输入数据格式正确的服务器端脚本。因为有人可以轻易地调整 HTML 来绕过验证,或者完全移除它。也有可能有人完全绕过你的 HTML,直接向你的服务器提交数据。如果你的服务器端代码未能验证其接收到的数据,当格式不正确的数据(或数据过大、类型错误等)被录入数据库时,可能会引发灾难。

关于样式的说明

有一些有用的伪类可用于设置表单元素的样式,以帮助用户看到他们的值是有效还是无效。它们是 :valid:invalid。在本节中,我们将使用以下 CSS,它将在包含有效值的输入框旁边放置一个复选标记(✔),在包含无效值的输入框旁边放置一个叉号(✗)。

css
div {
  margin-bottom: 10px;
  position: relative;
}

input + span {
  padding-right: 30px;
}

input:invalid + span::after {
  position: absolute;
  content: "✖";
  padding-left: 5px;
}

input:valid + span::after {
  position: absolute;
  content: "✓";
  padding-left: 5px;
}

该技术还需要在表单元素之后放置一个 <span> 元素,作为图标的容器。这是必需的,因为在某些浏览器上,某些输入类型不能很好地显示直接放在它们后面的图标。

设置必填项

你可以使用 required 属性,轻松地将输入值设为必填项,这样在允许表单提交之前必须输入一个值:

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input type="text" id="uname" name="name" required />
    <span class="validity"></span>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

渲染效果如下:

如果你尝试在没有输入用户名的情况下提交表单,浏览器会显示一条错误消息。

输入值长度

你可以使用 minlength 属性指定输入值的最小长度(以字符为单位);同样,使用 maxlength 设置输入值的最大长度(以字符为单位)。

下面的例子要求输入值的长度在 4 到 8 个字符之间。

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input
      type="text"
      id="uname"
      name="name"
      required
      size="10"
      placeholder="Username"
      minlength="4"
      maxlength="8" />
    <span class="validity"></span>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

渲染效果如下:

如果你尝试提交少于 4 个字符的表单,你会收到一条相应的错误消息(不同浏览器显示不同)。如果你尝试输入超过 8 个字符,浏览器将不允许你输入。

注意: 如果你指定了 minlength 但没有指定 required,那么该输入被认为是有效的,因为用户不需要指定一个值。

指定模式

你可以使用 pattern 属性指定一个正则表达式,输入的值必须匹配该表达式才被认为是有效的(关于使用正则表达式验证输入的速成课程,请参见根据正则表达式进行验证)。

下面的例子将值的长度限制在 4-8 个字符,并要求它只包含小写字母。

html
<form>
  <div>
    <label for="uname">Choose a username: </label>
    <input
      type="text"
      id="uname"
      name="name"
      required
      size="45"
      pattern="[a-z]{4,8}" />
    <span class="validity"></span>
    <p>Usernames must be lowercase and 4-8 characters in length.</p>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

渲染效果如下:

示例

你可以在我们的你的第一个 HTML 表单如何组织一个 Web 表单文章中看到文本输入框在实际场景中使用的好例子。

技术摘要

一个表示文本字段中包含的文本的字符串。
事件 changeinput
支持的通用属性 autocompletelistmaxlengthminlengthpatternplaceholderreadonlyrequiredsize
IDL 属性 listvalue
DOM 接口 HTMLInputElement
方法 select()setRangeText()setSelectionRange()
隐式 ARIA 角色 list 属性:textbox 带有 list 属性:combobox

规范

规范
HTML
# text-(type=text)-state-and-search-state-(type=search)

浏览器兼容性

另见