表单(form)是用户输入信息与网页互动的一种形式。大多数情况下,用户提交的信息会发给服务器,比如网站的搜索栏就是表单。 表单由一种或多种小部件组成,比如输入框、按钮、单选框或复选框,小部件称为控件。
1、<form>
form标签定义一个表单,所有表单内容放到这个容器元素之中。
<form action="https://example.com/api" method="post">
<label for="POST-name">用户名:</label>
<input id="POST-name" type="text" name="user">
<input type="submit" value="提交">
</form>
上面表单包含三个控件:label标签,文本输入框和提交按钮。 form有以下属性:
- accept-charset:服务器接受的字符编码列表
- action:服务器接收数据的URL
- autocomplete:若用户未填写某个控件,浏览器是否自动填写,值:off/on
- method:提交数据的HTTP方法,值:post/get/dialog
- enctype:method属性等于post时,该属性指定提交给服务器的MIME类型
- name:表单的名称,在网页中是唯一的
- novalidate:布尔属性,表单提交时是否取消验证
- target:在哪个窗口展示服务器返回的数据,值:_self/_blank/_parent/_top/iframe标签的name属性
1.2 enctype属性
form表单的enctype属性,指定了采用POST方法提交数据时,浏览器给出的数据的MIME类型。 enctype属性可以取以下值:
- application/x-www-form-urlencoded 默认类型,控件名和控件值都要转义,控件名和控件值之间用=分隔。控件按照出现顺序排列,控件之间用&分隔。
- multipart/form-data 主要用于文件上传,这个类型上传大文件时,会将文件分成多块传送,每一块的HTTP头信息都有Content-Disposition属性,值为form-data,以及一个name属性,值为控件名。
2、<fieldset>,<legend>
fieldset标签是一个块级容器标签,表示控件的集合,用于将一组相关控件组合成一组。 fieldset有以下属性:
- disabled:布尔属性,设置后内部控件不可用,变成灰色状态
- form:指定控件组所属的form,值等于form的id属性
- name:该控件组的名称 legend标签用来设置fieldset控件组的标题,通常是fieldset内部的第一个元素,嵌入显示在控件组的上边框里面。
3、<label>
label标签是一个行内元素,提供控件的文字说明,帮助用户理解控件的目的。 label标签的一大优势是增加控件的可用性。控件比较小时,不容易点击,那么点击对应的label标签,也能选中该控件,点击label,就相当于控件本身的click事件。 label标签的for属性关联相对应的控件,值为对应控件的id属性。 label属性如下:
- for:关联控件的id属性
- form:关联表单的id属性。 一个控件可以有多个关联的label标签。
4、<input>
4.1 简介
input标签是一个行内元素,用来接收用户的输入。单标签。 input标签的共同属性:
- autofocus:布尔属性,是否在页面加载时自动获得焦点
- disabled:布尔属性,是否禁用该控件
- form:关联表单的id属性
- list:关联datalist的id属性,设置该控件相关的数据列表
- name:控件的名称,用于向服务器提交数据时,控件键值对的键名。只有设置了name属性的控件,才会向服务器提交。
- readonly:布尔属性,是否为只读
- required:布尔属性,是否为必填
- type:控件类型
- value:控件的值
4.2 类型
type属性决定了input的形式,有以下取值:
- text:普通的文本输入框, 有以下配套属性:maxlength/minlength/pattern/placeholder/readonly/size/spellcheck
- search:用于搜索的文本输入框
- button:没有默认行为的按钮,通常指定click事件的监听函数使用,建议尽量不使用
- submit:表单的提交按钮,点击后表单提交给服务器, 有以下配套属性:formaction/formenctype/formmethod/formnovalidate/formtarget
- image:表示将一个图像文件作为提交按钮, 有以下配套属性:alt/src/height/width/formaction/formenctype/formmethod/formnovalidate/formtarget
- reset:一个重置按钮,点击后所有表格控件重置为初始值,不建议使用
- checkbox:复选框
- radio:单选框。多个单选框的name属性值应该一致, 有以下配套属性:
- checked:布尔属性,表示是否默认选中当前项
- value:用户选中该项时,提交到服务器的值,默认为on
- email:只能输入电子邮箱的文本输入框, 有以下配套属性:maxlength/minlength/multiple/pattern/placeholder/readonly/size/spellcheck 可以搭配datalist标签,提供输入的备选项。
- password:密码输入框, 有以下配套属性:maxlength/minlength/pattern/placeholder/readonly/size/autocomplete/inputmode
- file:文件选择框,允许用户选择一个或多个文件,用于文件上传功能, 有以下配套属性:accept/capture(user/environment)/multiple
- hidden:一个不显示在页面的控件,用来向服务器传递隐藏信息:为每个表单生成一个独一无二的隐藏编号,防止伪造表单提交
- number:数字输入框,只能输入数字, 有以下配套属性:max/min/placeholder/readonly/step
- range:一个滑块,用户拖动滑块,选择给定范围之中的一个数值,常用于调节音量, 有以下配套属性:max/min/step, 与datalist标签配合使用,可以在滑动区域产生刻度
- url:一个只能输入网址的文本框, 有以下配套属性:maxlength/minlength/pattern/placeholder/readonly/size/spellcheck, 与datalist标签搭配使用,可以形成下拉列表供用户选择
- tel:一个只能输入电话号码的输入框, 有以下配套属性:maxlength/minlength/pattern/placeholder/readonly/size
- color:一个选择颜色的控件,值为#rrggbb格式
- date:只能输入日期的输入框,可以输入年月日,不能输入时分秒, 有以下配套属性:max/min/step
- time:只能输入时间的输入框,可以输入时分秒,不能输入年月日, 有以下配套属性:max/min/readonly/step
- month:只能输入年份和月份, 有以下配套属性:max/min/readonly/step
- week:输入一年中第几周的输入框, 有以下配套属性:max/min/readonly/step
- datetime-local:时间输入框,让用户输入年月日和时分,不支持秒, 有以下配套属性:max/min/step
5、<button>
button标签生成一个可点击的按钮,没有默认行为,需要用type属性或脚本指定按钮的功能。 有以下属性:
- autofocus:布尔属性,网页加载时,焦点在这个按钮
- disabled:布尔属性,表示按钮不可用
- name:按钮名称,与value配合使用,提交到服务器
- value:按钮值,与name配合使用,提交到服务器
- type:按钮类型:submit/reset/button/menu?
- form:指定按钮关联的form表单,值为form的id属性
- formaction:数据提交到服务器的目标URL,会覆盖form元素的action属性
- formenctype:数据提交到服务器的编码方式,会覆盖form元素的enctype属性:application/x-www-form-urlencoded,multipart/form-data,text/plain
- formmethod:数据提交到服务器使用的HTTP方法,会覆盖form元素的method属性:post/get
- formnovalidate:布尔属性,数据提交到服务器时关闭本地验证,会覆盖form元素的novalidate属性
- formtarget:数据提交到服务器后,展示服务器返回数据的窗口,会覆盖form元素的target属性:_self/_blank/_parent/_top
6、<select>
select标签用于生成一个下拉菜单。 有如下属性:
- autofocus:布尔属性,页面加载时是否自动获得焦点
- disabled:布尔属性,是否禁用当前控件
- form:关联表单的id属性
- multiple:布尔属性,是否可以选择多个菜单项
- name:控件名
- required:布尔属性,是否为必填控件
- size:
7、<option>,<optgroup>
option标签用在select、optgroup、datalist里面,表示一个菜单项。 有如下属性:
- disabled:布尔属性,是否禁用该项
- label:该项的说明
- selected:布尔属性,是否为默认值
- value:该项提交到服务器的值 optgroup表示菜单项的分组,通常用在select的内部 有如下属性:
- disabled:布尔属性,是否禁用该组
- label:菜单项分组的标题
8、<datalist>
datalist标签是一个容器标签,用于为指定控件提供一组相关数据,通常用于生成输入提示。
9、<textarea>
textarea是一个块级元素,用来生成多行的文本框, 有如下属性:
- autofocus:布尔属性,是否自动获得焦点
- cols:文本框宽度,默认为20
- rows:文本框高度
- disabled:布尔属性,是否禁用该控件
- form:关联表单的id属性
- maxlength:允许输入的最大字符数
- mixlength:允许输入的最小字符数
- name:控件的名称
- placeholder:输入为空时显示的提示文本
- readonly:布尔属性,是否为只读
- required:布尔属性,是否为必填
- spellcheck:是否打开浏览器的拼写检查
- wrap:输入的文本是否自动换行
10、<output>
output标签是一个行内元素,用于显示用户操作的结果, 有如下属性:for/form/name
11、<progress>
progress标签是一个行内元素,表示任务的完成进度,浏览器通常会显示为进度条。 有如下属性:max/value
12、<meter>
meter标签是一个行内元素,表示指示器,显示已知范围内的一个值,适用于任务的当前进度、磁盘已用控件、充电量等带有比例性质的场合,浏览器通常会显示为一个不会滚动的指示条。 有如下属性:min/max/value/low/high/optimum