一、表单概述
-
核心作用:收集用户输入数据并提交到服务器
-
组成元素:输入框、按钮、选择框等交互控件
-
数据流向:用户填写 → 客户端 → 服务器端处理
二、<form>标签属性
属性 | 作用 | 示例 |
---|---|---|
action |
指定数据提交的服务器地址 | <form action="/submit.php"> |
method |
设置HTTP请求方法(GET/POST) | <form method="POST"> |
enctype |
数据编码方式(默认urlencoded,文件上传用multipart/form-data) | <form enctype="multipart/form-data"> |
name |
表单名称,用于JS操作 | <form name="loginForm"> |
id |
唯一标识符,用于CSS/JS操作 | <form id="regForm"> |
注意事项:
-
GET方法将数据附加到URL(可见,有长度限制)
-
POST方法在请求体中发送数据(更安全,适合敏感信息)
三、表单控件
1. 输入类控件(<input>)
类型 | 用途 | 示例 |
---|---|---|
text |
单行文本输入 | <input type="text" name="username"> |
password |
密码输入(内容掩码) | <input type="password" name="pwd"> |
email |
邮箱地址(自动格式验证) | <input type="email" name="email"> |
number |
数字输入(可设min/max) | <input type="number" min="0" max="100"> |
date |
日期选择 | <input type="date" name="birthday"> |
checkbox |
多选框(可多选) | <input type="checkbox" name="hobby" value="music">音乐 |
radio |
单选按钮(name需相同) | <input type="radio" name="gender" value="male">男 |
file |
文件上传 | <input type="file" name="avatar"> |
submit |
提交按钮 | <input type="submit" value="提交"> |
reset |
重置表单 | <input type="reset" value="清空"> |
2. 其他控件
-
<textarea>:多行文本输入
<textarea name="bio" rows="4" cols="50"></textarea>
-
<select>:下拉选择框
<select name="city"> <option value="bj">北京</option> <option value="sh">上海</option> </select>
-
<button>:多功能按钮
<button type="submit">提交</button>
四、表单验证(HTML5)
属性 | 作用 | 示例 |
---|---|---|
required |
必填字段 | <input type="text" required> |
pattern |
正则表达式验证 | <input pattern="\d{6}"> |
min/max |
数值/日期范围限制 | <input type="number" min="1"> |
maxlength |
最大字符数限制 | <input maxlength="10"> |
minlength |
最小字符数限制 | <input minlength="3"> |
五、布局与优化
1. 标签关联
<label for="username">用户名:</label>
<input type="text" id="username">
-
提升可访问性
-
点击标签可聚焦输入框
2. 分组显示
<fieldset>
<legend>联系信息</legend>
<!-- 表单控件 -->
</fieldset>
3. 样式建议
-
使用CSS Grid/Flex布局对齐表单元素
-
添加
:focus
样式提升交互体验 -
错误提示使用醒目颜色(如红色)
六、注意事项
-
敏感数据必须使用POST方法
-
文件上传必须设置
enctype="multipart/form-data"
-
客户端验证不能替代服务器端验证
-
单选框需要相同
name
属性实现互斥 -
推荐使用
<button>
替代<input type="submit">
(样式更灵活)
七、综合示例
<form action="/register" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>用户注册</legend>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required>
<label for="password">密码:</label>
<input type="password" id="password" name="pwd" minlength="6" required>
<label>性别:
<input type="radio" name="gender" value="male" required> 男
<input type="radio" name="gender" value="female"> 女
</label>
<label>上传头像:
<input type="file" name="avatar">
</label>
<button type="submit">注册</button>
<button type="reset">重置</button>
</fieldset>
</form>