formtarget属性是解决单表单多目标提交的关键手段,优先级高于form的target,仅对type="submit"或type="image"的button/input生效,支持_blank、_self、命名iframe等值。

formtarget 属性不是“锦上添花”,而是解决多目标提交场景下 target 全局覆盖失效的关键手段。它允许你在单个提交按钮上覆盖整个 <form></form> 的 target 行为,无需 JS、无需拆分表单。
什么时候必须用 formtarget 而不是 <form target="..."></form>
当你需要同一个表单具备多种响应打开方式时,<form></form> 的 target 属性就力不从心了——它只能设一个值,全局生效。比如:
- 用户填写完资料后,“保存草稿”要静默提交(
_self),不跳转; - 同时提供“预览”按钮,需在新标签页打开渲染结果(
_blank); - 还有一个“导出 PDF”按钮,要定向到内嵌的
<iframe name="pdf-viewer"></iframe>中加载(pdf-viewer)。
这些需求无法靠一个 <form target="_blank"></form> 满足,也别想着用 JS 改 form.target 再 submit——那会破坏原生表单的语义与可访问性。此时,formtarget 是唯一符合标准、零 JS、无障碍友好的解法。
formtarget 只能用在哪些元素上?
它只对两类提交触发器有效:
立即学习“前端免费学习笔记(深入)”;
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
-
<input type="submit">或<input type="image">—— 注意:不是所有input类型都支持,type="button"或type="text"加了也无效; -
<button type="submit"></button>—— 这是更推荐的写法,语义清晰、样式可控、默认行为稳定。
常见错误包括:
- 给
<button type="button"></button>加formtarget,完全无效果; - 漏写
type="submit",浏览器按默认type="submit"处理,但部分旧版 Safari 会降级为type="button",导致formtarget失效; - 在
<input type="reset">上使用,不合法也不起作用。
_parent 和 _top 在现代页面中怎么用?
HTML5 已废弃 <frameset></frameset>,所以这两个值不再用于传统框架集,但它们对 <iframe></iframe> 仍有明确语义:
-
_parent:把响应载入当前<iframe></iframe>的父级上下文。如果表单在嵌套三层 iframe 里,且你希望响应出现在第二层(即当前 iframe 的直接父容器),就用它; -
_top:强制打破所有 iframe 嵌套,在最外层顶级窗口中打开响应。适合“退出嵌入态”场景,比如管理后台嵌入的子应用想全屏跳转回主站; - 注意:
_top在跨域 iframe 中可能被浏览器拦截(取决于X-Frame-Options或Content-Security-Policy设置),不是 100% 可靠; - 命名 iframe(如
formtarget="my-frame")要求对应<iframe name="my-frame"></iframe>存在,且同源(或服务端配置了正确的allow权限)。
兼容性和容易忽略的细节
IE9 及更早版本完全不支持 formtarget,哪怕加了也当不存在。如果你仍需支持 IE9,得回退到 JS 方案(例如监听 click、临时改 form.target、再调 form.submit())。但要注意:
- 这种 JS 提交会绕过原生的
submit事件和内置校验(required、pattern等); -
formtarget的优先级高于<form target="..."></form>,但低于 JavaScript 动态设置的form.target(后者会在提交瞬间生效,覆盖前者); - 所有主流现代浏览器(Chrome ≥10、Firefox ≥4、Safari ≥5.1、Edge ≥12)均完整支持,包括移动端;
- 别混淆
formtarget和target:前者是提交按钮属性,后者是<a></a>或<form></form>的属性,作用对象和生效时机完全不同。
最常被漏掉的一点:当你用 formtarget="_blank" 时,浏览器新开的标签页默认没有 rel="noopener",存在轻微安全风险(新开页可通过 window.opener 访问原页)。虽然 formtarget 本身不提供 rel 控制,但若你用的是 <button></button>,可考虑配合 onclick + window.open 回退方案来补全——不过这就脱离了纯 HTML 语义了。权衡点就在这里:原生简洁性 vs 细粒度安全控制。


















