表单提交时数据仅来自form内有name属性且未disabled的控件;action和method指定提交url与方式;disabled可阻止提交,hidden输入框可隐藏但提交;js可通过submit事件拦截并用formdata自定义数据。

表单提交时数据从哪来
浏览器只把 <form></form> 内部、有 name 属性且处于可提交状态的表单控件值发给服务器。没有 name 的控件(比如 <input type="text"> 但没写 name="username")会被完全忽略,哪怕它有值。
-
disabled的控件不会提交,哪怕有name -
readonly的控件会提交,只要它有name -
<input type="checkbox">和<input type="radio">只有在checked状态下才提交,否则不发送该字段 -
<select multiple></select>中未被选中的选项不参与提交
如何控制提交到哪个 URL 和用什么方法
靠 <form></form> 的 action 和 method 属性:
-
action指定接收数据的地址,可以是绝对路径("@#@#@#@#@#@#@#@#@#@0")、相对路径("./api/submit.php")或空字符串("",表示提交给当前页面 URL) -
method常用"GET"或"POST":-
GET把数据拼在 URL 后面(?name=alice&age=25),适合简单查询,有长度限制,不安全 -
POST把数据放在请求体里,无长度限制,适合传敏感或大量数据
-
注意:method="put" 或 method="delete" 在原生 HTML 表单中不被支持——浏览器只会当 GET 或 POST 处理,真要用需配合 JavaScript 或后端代理。
如何让某个字段不被提交但保留在表单里
没有“隐藏但提交”的内置机制,只有两种明确行为:
- 用
display: none或visibility: hidden:样式隐藏,但只要有name且没disabled,仍会提交 - 用
disabled:控件变灰不可交互,且一定不提交,这是最可靠的方式 - 临时移除
name属性(比如用 JS):也能阻止提交,但不如disabled直观和语义清晰
如果只是想“前端不显示、后端需要”,正确做法是用 <input type="hidden" name="token" value="abc123"> —— 它没有视觉呈现,但有 name、没 disabled,所以照常提交。
提交前用 JavaScript 改数据或加字段
原生表单提交前可监听 submit 事件,调用 event.preventDefault() 阻止默认行为,再手动构造请求:
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
formData.append('timestamp', Date.now()); // 动态加字段
formData.set('user_id', 'U999'); // 覆盖已有字段
<p>fetch('/api/submit', {
method: 'POST',
body: formData
});
});</p>
注意点:
-
FormData自动收集所有带name的控件,包括<input type="file"> - 直接修改
formData不影响页面上控件的值,只是影响本次提交内容 - 如果用
fetch提交,后端收到的是multipart/form-data(有文件)或application/x-www-form-urlencoded(纯文本),取决于你是否 append 了Blob或File
表单提交看着简单,但 name 是否存在、disabled 状态、method 实际含义、以及 JS 干预时机,这几处错一个,数据就丢得悄无声息。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











