直接写<input type="hidden" name="key" value="value">即可,浏览器不渲染但表单提交时携带该字段;type必须小写、name不可省略,禁用CSS隐藏替代,且后端须校验其合法性。

怎样用 <input> 创建隐藏域
直接写 <input type="hidden" name="key" value="value"> 就行,浏览器不会渲染它,但表单提交时会携带该字段。这是最轻量、最通用的隐藏数据传递方式,不需要 JS 或框架介入。
type="hidden" 的常见错误写法
容易手误写成 type="hide"、type="HIDDEN"(虽然多数浏览器能容错,但规范要求小写)、或漏掉 name 属性——没 name 的 <input> 不会被提交,哪怕有 value 也没用。
-
type必须是小写的"hidden" -
name属性不可省略,否则后端收不到 - 不要用
style="display:none"或hidden属性替代type="hidden",前者仍会提交,且可能被用户意外修改
和 <input type="text"> 隐藏的区别在哪
type="hidden" 是语义化隐藏:不占布局、不可聚焦、不响应键盘输入、不触发 focus/input 事件;而把 type="text" 加 style="opacity:0;position:absolute" 只是视觉隐藏,仍可 tab 切入、被 JS 读写、甚至被自动化工具误操作。
- 后端识别依据是
type值,不是 CSS - 某些前端校验库(如 jQuery Validation)默认跳过
type="hidden",但会检查type="text"是否为空 - 无障碍(a11y)工具完全忽略
type="hidden",符合预期;而隐藏的文本框可能被误读为“需填写的字段”
多个隐藏域怎么避免命名冲突或覆盖
如果页面动态生成多个 <input type="hidden">,且 name 相同(比如都叫 id),提交时后端收到的是最后一个值(浏览器行为),不是数组。要传列表,得用数组式命名:
<input type="hidden" name="item_ids[]" value="101"><br><input type="hidden" name="item_ids[]" value="102">
- PHP 自动转成
$_POST['item_ids'] = [101, 102] - Node.js / Python 等需手动解析
item_ids[]这类带[]的键名 - 避免用纯数字或特殊字符开头的
name,部分老框架解析异常
value,所以 type="hidden" 只适合存非敏感、非关键逻辑判断的数据,比如页面来源标识、临时 token(应配后端签名验证),千万别放权限开关或价格。


















