<select>: HTML 选择元素

基线 广泛可用

此功能已得到良好建立,并在许多设备和浏览器版本中有效。它自以下时间以来在所有浏览器中均可用 2015 年 7 月.

<select> HTML 元素表示提供选项菜单的控件。

试试看

以上示例展示了典型的 <select> 用法。它被赋予了 id 属性以使其能够与 <label> 关联以实现可访问性目的,以及 name 属性以表示提交到服务器的关联数据点的名称。每个菜单选项都由嵌套在 <select> 内部的 <option> 元素定义。

每个 <option> 元素应具有 value 属性,其中包含在选择该选项时提交到服务器的数据值。如果未包含 value 属性,则该值默认为元素中包含的文本。您可以在 <option> 元素上包含 selected 属性,以使其在页面首次加载时默认被选中。

<select> 元素在 JavaScript 中由 HTMLSelectElement 对象表示,该对象具有 value 属性,其中包含所选 <option> 的值。

<select> 元素具有一些独特的属性,您可以使用它们来控制它,例如 multiple 用于指定是否可以选择多个选项,以及 size 用于指定应同时显示多少个选项。它还接受大多数通用表单输入属性,例如 requireddisabledautofocus 等。

您可以在 <optgroup> 元素中进一步嵌套 <option> 元素,以在下拉菜单中创建单独的选项组。您还可以包含 <hr> 元素以创建分隔符,这些分隔符将在选项之间添加视觉断点。

有关更多示例,请参阅 本机表单小部件:下拉内容

属性

此元素包含 全局属性

autocomplete

一个字符串,提供对 用户代理 自动完成功能的提示。有关值的完整列表以及有关如何使用自动完成的详细信息,请参阅 HTML 自动完成属性

autofocus

此布尔属性让您指定表单控件在页面加载时应该具有输入焦点。文档中只有一个表单元素可以具有 autofocus 属性。

disabled

此布尔属性指示用户无法与控件交互。如果未指定此属性,则控件将从包含元素继承其设置,例如 <fieldset>;如果包含元素中没有设置 disabled 属性,则控件将被启用。

form

<select> 与其关联的 <form> 元素(其表单所有者)关联。此属性的值必须是同一文档中 <form>id。(如果未设置此属性,则 <select> 将与其祖先 <form> 元素关联,如果有的话。)

此属性让您将 <select> 元素关联到文档中任何位置的 <form>,而不仅仅是在 <form> 内部。它还可以覆盖祖先 <form> 元素。

multiple

此布尔属性指示可以在列表中选择多个选项。如果未指定它,则一次只能选择一个选项。当指定 multiple 时,大多数浏览器将显示一个滚动列表框,而不是单行下拉菜单。

name

此属性用于指定控件的名称。

required

一个布尔属性,指示必须选择具有非空字符串值的选项。

size

如果控件以滚动列表框形式呈现(例如,当指定 multiple 时),此属性表示列表中应一次显示的行数。浏览器不需要以滚动列表框形式呈现选择元素。默认值为 0

注意:根据 HTML 规范,size 的默认值应为 1;但是,在实践中,人们发现这会导致某些网站崩溃,并且目前没有其他浏览器这样做,因此 Mozilla 决定暂时继续在 Firefox 中返回 0

使用注意事项

选择多个选项

在台式电脑上,可以通过多种方式在具有multiple属性的<select>元素中选择多个选项。

鼠标用户可以按住CtrlCommandShift键(取决于您的操作系统),然后单击多个选项来选择/取消选择它们。

警告:以下描述的通过键盘选择多个非连续项目的机制目前似乎只在 Firefox 中有效。

在 macOS 上,Ctrl + UpCtrl + Down 快捷键与 OS 的默认快捷键(用于Mission ControlApplication windows)冲突,因此您需要先关闭这些快捷键才能使用。

键盘用户可以通过以下方式选择多个连续的项目:

  • 将焦点放在<select>元素上(例如,使用Tab)。
  • 使用UpDown光标键上下移动选项,选择想要选择范围的顶部或底部的项目。
  • 按住Shift键,然后使用UpDown光标键增加或减少所选项目的范围。

键盘用户可以通过以下方式选择多个非连续的项目:

  • 将焦点放在<select>元素上(例如,使用Tab)。
  • 按住Ctrl键,然后使用UpDown光标键更改“聚焦”的select选项,即如果您选择这样做,将被选择的选项。“聚焦”的select选项会以虚线突出显示,与键盘聚焦的链接相同。
  • Space选择/取消选择“聚焦”的select选项。

使用 CSS 样式化

<select>元素以 CSS 样式化是出了名的困难。您可以影响某些方面,就像任何元素一样——例如,操纵盒子模型显示的字体等,并且可以使用appearance属性删除默认的系统appearance

但是,这些属性在不同的浏览器中不会产生一致的结果,而且很难将不同类型的表单元素在同一列中对齐。<select>元素的内部结构很复杂,难以控制。如果您希望获得完全控制权,则应考虑使用具有良好样式化表单小部件功能的库,或者尝试使用非语义元素、JavaScript 和WAI-ARIA来滚动您自己的下拉菜单以提供语义。

有关<select>样式化的更多有用信息,请参阅:

无障碍

<select>中的<hr>应该被认为纯粹是装饰性的,因为它们目前在可访问性树中不可见,因此也不向辅助技术公开。

示例

基本 select

以下示例创建一个非常简单的下拉菜单,其中第二个选项默认选中。

html
<!-- The second value will be selected initially -->
<select name="choice">
  <option value="first">First Value</option>
  <option value="second" selected>Second Value</option>
  <option value="third">Third Value</option>
</select>

结果

带分组选项的 select

以下示例使用<optgroup><hr>创建一个带有分组的下拉菜单,以便用户更容易理解下拉菜单中的内容。

html
<label for="hr-select">Your favorite food</label> <br />

<select name="foods" id="hr-select">
  <option value="">Choose a food</option>
  <hr />
  <optgroup label="Fruit">
    <option value="apple">Apples</option>
    <option value="banana">Bananas</option>
    <option value="cherry">Cherries</option>
    <option value="damson">Damsons</option>
  </optgroup>
  <hr />
  <optgroup label="Vegetables">
    <option value="artichoke">Artichokes</option>
    <option value="broccoli">Broccoli</option>
    <option value="cabbage">Cabbages</option>
  </optgroup>
  <hr />
  <optgroup label="Meat">
    <option value="beef">Beef</option>
    <option value="chicken">Chicken</option>
    <option value="pork">Pork</option>
  </optgroup>
  <hr />
  <optgroup label="Fish">
    <option value="cod">Cod</option>
    <option value="haddock">Haddock</option>
    <option value="salmon">Salmon</option>
    <option value="turbot">Turbot</option>
  </optgroup>
</select>

结果

具有多个功能的 advanced select

以下示例更复杂,展示了您可以在<select>元素上使用的更多功能。

html
<label>
  Please choose one or more pets:
  <select name="pets" multiple size="4">
    <optgroup label="4-legged pets">
      <option value="dog">Dog</option>
      <option value="cat">Cat</option>
      <option value="hamster" disabled>Hamster</option>
    </optgroup>
    <optgroup label="Flying pets">
      <option value="parrot">Parrot</option>
      <option value="macaw">Macaw</option>
      <option value="albatross">Albatross</option>
    </optgroup>
  </select>
</label>

结果

您会看到:

  • 由于我们包含了multiple属性,因此可以选择多个选项。
  • size属性导致一次只显示 4 行;您可以滚动以查看所有选项。
  • 我们包含了<optgroup>元素,将选项分成不同的组。这只是一个纯粹的视觉分组,其可视化通常包括组名以粗体显示,选项缩进。
  • “Hamster”选项包含disabled属性,因此根本无法选择。

技术摘要

内容类别 流内容短语内容交互式内容列表可标记可重置可提交与表单关联元素
允许的内容 零个或多个<option><optgroup><hr>元素。
标签省略 无,起始标签和结束标签都是必需的。
允许的父级 任何接受短语内容的元素。
隐式 ARIA 角色 combobox没有multiple属性,并且没有size属性大于 1,否则为listbox
允许的 ARIA 角色 menu没有multiple属性,并且没有size属性大于 1,否则不允许使用role
DOM 接口 HTMLSelectElement

规范

规范
HTML 标准
# the-select-element

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅