表单必须设置name属性才能提交数据,仅用id或class无效;name值应为英文小写加下划线,避免中文或特殊字符;submit按钮也建议设name;textarea换行需wrap="soft"或CSS white-space: pre-wrap;required仅校验非空,后端必须二次验证;action不可为"#",method默认GET,敏感数据须用POST。

表单必须包含 name 属性才能提交数据
浏览器只把带 name 的表单控件(如 <input>、<textarea>)的值发给服务器。新手常写 id="msg" 或 class="input" 就以为够了,结果后端收不到任何内容。
正确写法示例:
<textarea name="message"></textarea><br><input type="text" name="author">
-
name值不能含空格或特殊符号,推荐用英文小写+下划线,比如user_email - 不要用
name="姓名"这类中文——部分旧浏览器或后端框架会解析失败 -
submit按钮也建议加name(如name="submit"),方便后端区分是否真提交
textarea 默认无换行,需手动加 wrap="soft" 或 CSS
用户按 Enter 输入换行,但原始 <textarea> 提交后,后端收到的可能是纯空格或 \r\n 被过滤掉,显示成一行。这不是 bug,是默认行为。
解决方法二选一:
立即学习“前端免费学习笔记(深入)”;
- 加 HTML 属性:
<textarea name="message" wrap="soft"></textarea>(兼容性好,无需 JS) - 用 CSS 保留空白:
textarea { white-space: pre-wrap; }(更可控,但依赖样式加载)
注意:wrap="hard" 会强制在超长行末尾插入 \n,改变原始输入,不推荐用于留言板。
用 required 属性做基础校验,但别只靠它
required 能阻止空提交,且原生提示友好,适合新手起步。但它只检查是否为空,不防恶意输入、长度溢出或 XSS。
- 必填项加
required即可,例如:<input type="text" name="author" required> - 配合
maxlength="200"控制<textarea>长度,避免数据库字段溢出 - 千万别信前端校验能拦住坏数据——后端必须重验,哪怕只是简单 trim + 长度判断
常见翻车点:加了 required 却忘了设 name,表单照样空着提交成功。
表单 action 留空或设为 "#" 时,页面会刷新但数据消失
新手常把 <form action="#"> 当“暂时不用后端”的占位写法。实际效果是:点击提交 → 页面跳到顶部 → 表单清空 → 什么都没留下。
- 调试阶段建议先设
action="/test-receive"(哪怕 404),确认数据能发出去 - 真想本地测试,可用
onsubmit="console.log(new FormData(this)); return false;"拦住提交并打印数据 - 若用 JS 处理提交,
<form onsubmit="handleSubmit(event)">中务必调用event.preventDefault()
最易忽略的一点:没写 method 属性时,默认是 GET,敏感信息(如留言内容)会暴露在 URL 里——留言板必须用 method="POST"。



















