target="_self" 是 的默认行为,表示提交后在当前窗口加载响应;失效主因是属性位置错误(应写在 上而非按钮)、未设 type="submit"、js 阻止默认提交,或服务端重定向覆盖。

target="_self" 是 <form></form> 的原生属性值,表示表单提交后,服务器响应内容将在**当前窗口或标签页中加载并替换原有页面**。它不是可选行为,而是默认行为——哪怕你完全不写 target,浏览器也按 _self 处理。
为什么加了 target="_self" 还跳转失败?
常见错误不是值写错,而是位置放错:
- 把
target="_self"写在<button></button>或<input type="button">上——无效,target只认<form></form>标签 - 用了
<button></button>但没声明type="submit",导致点击不触发表单提交,自然也不走target - 表单被 JavaScript 阻止了默认提交(比如
event.preventDefault()),此时target完全不生效 - 服务端返回了重定向(
302或303),而重定向响应头里的Location会接管跳转逻辑,覆盖target行为
target="_self" 和 formtarget="_self" 有什么区别?
二者目标一致,但作用层级和优先级不同:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
<form target="_self"></form>是全局设定,影响该表单下所有type="submit"按钮(除非被覆盖) -
<button type="submit" formtarget="_self"></button>是单按钮覆盖指令,只对该按钮生效;即使<form></form>设了target="_blank",这个按钮点下去仍走_self -
formtarget永远比target优先——这是规范明确规定的覆盖规则 -
formtarget只支持<button type="submit"></button>和<input type="submit">,<input type="button">或普通<button></button>加了也无效
什么时候必须显式写 target="_self"?
多数情况下不用写,因为它是默认值。但以下场景建议显式声明:
- 表单父级有
<base target="_blank">,它会污染所有相对链接和表单提交,此时需用target="_self"主动“抵消” - 团队协作中为增强可读性,明确表达“此处不希望新开页”,避免后续误加
formtarget或修改<base>后行为突变 - 与
formtarget="_blank"按钮共存时,保持语义对称(如“保存”用target="_self",“预览”用formtarget="_blank") - 某些老旧 CMS 或低代码平台会自动注入
target,显式写死可防意外覆盖
真正容易被忽略的是:当表单提交后页面“看似没刷新”,实际可能是服务端返回了 204 No Content 或前端 JS 拦截并手动处理了响应——这时候 target 本身没失效,只是你看不到跳转效果。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










