表单必须设置method和action属性才能正常提交;method默认为GET但联系表单应设为POST,action需指向真实后端接口或第三方服务;所有提交数据的控件(含textarea和submit按钮)必须带name属性,否则后端无法接收;type应按语义选用(如email、tel),并配合required等属性增强校验;mailto:不可靠,应使用后端API或托管服务实现邮件发送。

表单必须包含 method 和 action 属性才可能提交
不设 method 时浏览器默认用 GET,但联系表单通常该用 POST;不设 action 表单会提交到当前 URL,后端没接口就只是刷新页面。常见错误是只写 <form> 空标签,结果点提交毫无反应。
-
method="POST"更安全,适合传姓名、邮箱、消息内容 -
action填真实后端接收地址,比如action="/contact"或第三方服务如action="https://formspree.io/f/your-email" - 本地测试时可先设
action="#"配合 JS 拦截,避免跳转
input 类型要按字段语义选,别全用 type="text"
用错类型不仅影响体验(比如手机弹不出邮箱键盘),还可能被浏览器自动校验拦截。例如邮箱字段写成 type="text",用户输错格式也不会提示。
- 邮箱:必须用
type="email",浏览器会做基础格式检查 - 电话:用
type="tel",iOS 会调出数字键盘 - 必填项加
required属性,如<input type="email" required> - 不要用
type="number"代替电话——它会拒绝带括号或横线的合法号码
textarea 和 submit 按钮要配 name 才能被后端收到
很多初学者以为只要用户输入了内容,后端就能拿到。其实没有 name 属性的表单控件,提交时根本不会发数据过去,textarea 和 button 尤其容易漏掉。
-
<textarea name="message"></textarea>—— 后端靠name键取值 - 提交按钮也得有
name,比如<button type="submit" name="submit" value="send">发送</button> - 避免用
<input type="image">替代按钮,它会额外发坐标参数,后端处理更麻烦
纯 HTML 表单无法发邮件,别指望 mailto: 可靠
action="mailto:you@example.com" 看似省事,实际依赖用户本地邮件客户端,Gmail 或 Outlook Web 版根本不支持,Safari 在 iOS 上常直接失败。这不是兼容性问题,是设计层面不可用。
立即学习“前端免费学习笔记(深入)”;
-
mailto:只能拼接简单参数(?subject=xxx&body=yyy),无法传textarea的换行和特殊字符 - 中文 subject 会被编码乱码,用户看到的是
%E4%BD%A0%E5%A5%BD这类 - 真正可用的路径只有:接自己后端 API / 用 Formspree / 使用 Netlify Forms 等托管服务
表单结构本身很简单,难在前后端衔接和容错处理。一个没设 name 的 textarea,或一个空 action,就能让整个表单静默失效——这些地方看不见,却最常出问题。



















