找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

227

积分

0

好友

27

主题
发表于 前天 21:13 | 查看: 2| 回复: 0

表单标签总览

规范中共有 15 个表单相关标签(meterprogress 严格来说不算传统表单控件,但在规范里归在表单元素中)。

标签 用于
<form> 用户输入的容器:收集用户信息、向服务器提交数据(用户交互)。
<label> 控件的说明文字;用 for 关联控件:label.for = 元素.id
<input> 输入控件:收集用户输入(空元素)。
<datalist> 建议值列表(仅建议、非强制),配合 option[value];通过 input.list = datalist.id 绑定。
<textarea> 多行文本输入。
<button> 按钮:submit/reset/button;内容可嵌套 HTML。
<select> 下拉选择(可单选/多选)。
<optgroup> <select> 内选项分组。
<option> <select>/<datalist> 的选项。
<fieldset> 表单分组(带边框语义)。
<legend> <fieldset> 的分组标题(第一个子元素)。
<output> 输出结果展示(默认不提交)。
<progress> 任务进度条(通常不提交)。
<meter> 计量器(通常不提交)。
<selectedcontent>(实验) 下拉当前选择项内容(了解即可)。

本文重点讲解 form / label / input / datalist 四个标签与常用属性。想系统复习 HTML 与表单基础,可结合阅读:HTML5 表单与属性


1. <form>:用户输入的容器(提交数据)

在这里插入图片描述

<form> 表示文档中的一个区域,包含交互控件,用于向 Web 服务器提交信息。通常所有表单控件都放在 <form> 内(或通过控件的 form 属性进行逻辑绑定)。

1.0 一个最小可用示例(登录表单)

<!-- 表单标签 -->
<form action="">
  <h1>登录界面</h1>
  <h2>请输入账号密码</h2>

  <label for="account">账号:</label>
  <input type="text" name="account" id="account">

  <br />

  <label for="password">密码:</label>
  <input type="password" name="password" id="password">
  <br />

  <input type="submit" value="登录">
</form>

在这里插入图片描述


1.1 <form> 常用属性速查表

属性 用途 典型取值/说明
accept-charset 服务器可接受的字符编码列表 常见:UTF-8;HTML5 仅允许空格分隔多个编码
action 表单提交目标 URL 为空/省略:默认提交到当前页面 URL
autocomplete 是否允许浏览器自动补全 on/off;会被子控件覆盖;有继承性
enctype 表单数据编码类型(MIME) application/x-www-form-urlencoded(默认) / multipart/form-data(文件上传) / text/plain(调试)
method 发送位置/HTTP 方法 get/post/dialog
target 响应内容显示位置 _self/_blank/_parent/_top/framename
novalidate 禁用浏览器内置校验 布尔属性;可被提交按钮的 formnovalidate 覆盖
name 表单名称(区分表单、旧式 JS 访问) 字符串;现代更常用 id
rel 当前文档与提交目标的关系 noopener noreferrer nofollow search ...(空格分隔)

1.2 accept-charset:字符编码(避免乱码)

在这里插入图片描述

  • 作用:声明提交表单时使用的字符编码列表,浏览器通常优先使用列表靠前的编码。
  • 现实最佳实践:页面、服务端、数据库统一 UTF-8,多数场景可不写该属性。

基本语法:

<form accept-charset="UTF-8">
  <!-- 表单内容 -->
</form>

典型坑:页面 <meta charset="UTF-8">,表单却写 accept-charset="ISO-8859-1",中文提交容易乱码。


1.3 action:提交到哪里(URL)

在这里插入图片描述

  • 作用:指定表单提交的目标 URL。
  • 覆盖规则:提交按钮可用 formaction 覆盖 form.action

相对路径(推荐):

<form action="/api/submit">

绝对 URL:

<form action="https://example.com/api/submit">

空值/省略(提交到当前页面):

<form action="">
<!-- 或 -->
<form>

在 SPA(如 React/Vue)里,直接用 action 提交通常会刷新页面;更常见做法是拦截默认提交,用 fetch/axios 异步提交。


1.4 autocomplete:浏览器自动补全

在这里插入图片描述

  • 可用在:<form>、文本/数值类 <input><textarea><select>
  • 默认值:on(未显式设置时浏览器通常会尝试自动填充)。
  • 继承性:form 上设置会被子控件继承;子控件可覆盖。
<form action="#" method="get" autocomplete="on">
  <label>First name:<input type="text" name="firstname" /></label><br />
  <label>Last name: <input type="text" name="lastname"/></label><br />
  <label>E-mail: <input type="email" name="email" autocomplete="off"/></label><br />
  <input type="submit" />
</form>

与登录/密码相关的字段,建议使用更精确的令牌值(如 autocomplete="username"autocomplete="current-password"),比简单 on/off 更可靠。


1.5 enctype:表单数据如何编码(MIME)

在这里插入图片描述

enctype 含义 适用场景
application/x-www-form-urlencoded 默认;URL 编码键值对 普通文本表单(登录/搜索/注册)
multipart/form-data 多部分表单,不对内容做 URL 编码 必须用于文件上传(<input type="file">
text/plain 纯文本(编码很弱) 调试或极少数特殊约定场景(一般不用于生产)

文件上传示例(必须 POST + multipart/form-data):

<form action="/upload" method="post" enctype="multipart/form-data">
  <div>
    <label for="name">姓名:</label>
    <input type="text" id="name" name="name">
  </div>

  <div>
    <label for="avatar">上传头像:</label>
    <input type="file" id="avatar" name="avatar" accept="image/*">
  </div>

  <button type="submit">提交</button>
</form>

1.6 method:GET / POST / DIALOG

在这里插入图片描述

维度 GET POST DIALOG
数据位置 URL 查询串 ?key=value 请求体 body 不提交到服务器
适用 小数据、非敏感(搜索/筛选) 敏感/大数据/会修改数据(登录/注册/上传) <dialog> 内表单:提交即关闭弹窗
备注 易泄露到地址栏/日志 更安全(仍建议 HTTPS) action 通常被忽略

与网络语义相关的细节(如 GET 的可缓存、POST 的重复提交风险等),本质都建立在 HTTP 行为之上。


1.7 target:响应内容显示在哪

在这里插入图片描述

行为
_self(默认) 当前窗口/标签页
_blank 新窗口/新标签页
_parent 父框架
_top 顶层窗口(跳出 iframe)
framename 指定 name 的框架

target="_blank" 建议配合 rel="noopener noreferrer",避免 window.opener 带来的安全问题。


1.8 novalidate:禁用浏览器内置校验

在这里插入图片描述

  • 作用:表单提交时不触发浏览器的约束验证(required/pattern 等)。
  • 常见用途:自定义校验 UI、分步表单、保存草稿、测试调试。
  • 风险:只关前端校验会导致脏数据/安全问题;后端校验必须保留
<form action="#" novalidate>
  <label>E-mail: <input type="email" name="user_email"/></label>
  <input type="submit" />
</form>

1.9 name:表单命名(主要用于 JS/兼容)

在这里插入图片描述

  • 用途:旧式 DOM 访问(document.forms['loginForm'])或多表单区分。
  • 现代实践:更常用 id + querySelector;表单控件的 name 才是提交数据的关键。
<form name="loginForm" action="/login" method="post">
  <label>用户名:<input type="text" name="username"></label>
  <label>密码:<input type="password" name="password"></label>
  <button type="submit">登录</button>
</form>

<script>
  const form = document.forms['loginForm'];
  const username = form.elements['username'];

  form.onsubmit = function() {
    if (username.value === '') {
      alert('请输入用户名');
      return false;
    }
    return true;
  };
</script>

1.10 rel:与提交目标的关系(安全/SEO/语义)

在这里插入图片描述

常用组合(空格分隔):

  • 安全/隐私:noopenernoreferrer
  • SEO:nofollow
  • 语义:searchhelpprev/next
<form action="/submit" rel="noopener noreferrer nofollow" target="_blank">...</form>
<form action="/search" rel="search" method="get">...</form>

2. <label>:表单控件说明(可访问性关键)

在这里插入图片描述

<label> 用来描述表单控件用途,提升可用性与可访问性:

  • 点击 label 可聚焦/激活对应控件(增大可点击区域)
  • 屏幕阅读器可读出 label 文案
  • 一个 label 只能关联一个控件(但一个控件可被多个 label 关联)

2.1 显式关联(推荐):for 绑定 id

<label for="username">用户名</label>
<input id="username" type="text">

2.2 隐式关联:控件嵌套在 label 内

<label>出生日期:<input type="text" name="dob"></label>

2.3 示例:点击文本选中单选按钮

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
  <input type="submit" value="提交表单" />
</form>

实务建议:尽量不要把额外的交互元素(如 <a>)塞进 <label> 内,避免点击行为冲突。


3. <input>:最常用的输入控件(空元素)

在这里插入图片描述

<input> 的外观与行为主要由 type 决定。未写 type 时默认 type="text"

基本语法:

<input type="输入类型" name="字段名" value="默认值" />

输入框的用途说明优先用 <label>placeholder 只做辅助提示。


3.1 <input> 常用属性总表(精选但覆盖常见场景)

属性 用途 适用 type 备注
accept 文件选择过滤(建议性) file 可写 MIME 或扩展名,逗号分隔
alt 图片提交按钮替代文本 image 可访问性必备
autocomplete 自动填充类型/开关 多数文本/数值类 推荐用具体令牌值
autofocus 页面加载自动聚焦 可聚焦元素 多个只生效一个
checked 默认选中 checkbox/radio 只影响初始状态
dirname 提交文本方向字段 text/search/url/tel/email 常配合 dir="auto"
disabled 禁用控件(不提交) 全部 无法聚焦/交互
readonly 只读(会提交) 文本/日期/数字类 不参与约束验证
required 必填 多数输入类型 仅前端约束,后端仍需校验
min/max/step 数值/日期范围与步进 number/range/date... 格式必须符合 type
minlength/maxlength 字符长度范围 文本类 number 常无效
multiple 多文件/多邮箱 file/email 邮箱用英文逗号分隔
pattern 正则验证 文本类 隐式全匹配,无需 ^$
list 绑定建议值列表 多数文本/数值/日期等 配合 <datalist>
form* 覆盖 form 的提交行为 提交按钮 formaction/formmethod/...

3.2 accept:文件类型过滤(提示,不是强制)

在这里插入图片描述

<input type="file" accept="image/gif,image/jpeg">
<input type="file" accept="image/*">
<input type="file" accept=".png,.gif,.jpg">

accept 只是前端筛选提示,用户可切换“所有文件”绕过;服务端必须做二次校验(如检查 MIME、Magic Number 等)。


3.3 alt:图片提交按钮的替代文本(仅 type="image"

在这里插入图片描述

<form action="/submit">
  <input type="image" src="submit.png" alt="提交表单">
</form>

3.4 disabled vs readonly:最容易混

特性 disabled readonly
是否可编辑
是否可聚焦 是(可 Tab 到)
是否随表单提交 不提交 会提交
适用 不允许交互且不需要传值 需要展示且必须提交该值

3.5 list + <datalist>:建议值列表(不强制)

在这里插入图片描述

绑定规则:input.list 的值 = datalist.id

<label>请选择您喜欢的水果:
  <input type="text" list="fruits" name="fruit">
</label>

<datalist id="fruits">
  <option value="apple"></option>
  <option value="banana"></option>
  <option value="orange"></option>
</datalist>

4. <datalist>:建议值数据列表(仅建议、非强制)

在这里插入图片描述

  • <datalist> 本身不会直接显示;必须与 <input list="..."> 绑定后才会出现建议列表。
  • 建议:为兼容不同浏览器表现,优先使用 option[value],尽量不要过度依赖 label/文本内容 的展示一致性。

4.1 optionvalue/label/文本内容 差异示例

<label>请选择您喜欢的水果:
  <input type="text" list="fruits-two" name="fruits-choice">
</label>
<datalist id="fruits-two">
  <option value="apple">苹果</option>
  <option value="banana">香蕉</option>
  <option value="orange">橘子</option>
</datalist>

结论:输入框最终填入的一定是 value;下拉里显示 label/文本/value 的组合因浏览器而异。


5. <select><datalist> 的核心区别

特性 <select> <datalist>
交互 只能选固定项 可选建议项,也可自由输入
是否强制选项 强制 不强制(仅建议)
多选 支持(multiple 不支持
样式控制 受限 输入框可控,但建议列表样式通常不可控
兼容性 全面 现代浏览器为主,细节有差异

6. 小结(记住这几条就够用)

  1. 普通文本表单:默认 method="get" + enctype 默认即可;但涉及隐私/登录一般用 post。  
  2. 文件上传:必须 method="post" + enctype="multipart/form-data"。  
  3. 可访问性:表单控件优先配 <label for="id">,不要用 placeholder 代替说明。  
  4. disabled 不提交,readonly 会提交;别用错。  
  5. datalist 是“建议”,select 是“限制选择”。



上一篇:企业端LoadRunner性能测试高级试炼 脚本开发、场景监控与实战分析全解析
下一篇:VMware虚拟机安装Kali Linux到优盘实现便携启动教程
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 10:46 , Processed in 0.324694 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表