formtarget 属性不支持 iframe 名称,仅识别 _self、_blank、_parent、_top;正确做法是使用 form 的 target 属性并匹配 iframe 的 name 值,确保同源且 name 拼写一致。

formtarget 属性不支持 iframe 名称作为目标值
直接给 formtarget 设成 "myIframe" 是无效的——浏览器会忽略它,表单仍按默认行为提交(通常是当前页面跳转)。formtarget 只认标准的 _self、_blank、_parent、_top,不识别自定义 iframe 的 name 或 id。
正确做法:用 form 元素的 target 属性指向 iframe name
target 是 <form></form> 原生支持的属性,且明确接受 iframe 的 name 值。只要 iframe 有 name(不是 id),就能精准投递。
实操要点:
- iframe 必须设置
name属性,例如:<iframe name="resultFrame"></iframe> - form 设置
target="resultFrame",不是formtarget - 确保 iframe 和 form 在同一源,否则跨域时提交可能被拦截或响应无法显示
- 若用 JavaScript 动态提交,可临时修改
form.target再调用submit()
示例:
为什么不用 formtarget + iframe?
因为 formtarget 是为 <button></button> 或 <input type="submit"> 提供的“覆盖级”提交目标,但它只作用于浏览器预定义的 browsing context 名称。即使 iframe 存在且 name 匹配,formtarget="myFrame" 也会被当作无效值降级到 _self。
常见误判现象:
- 控制台无报错,但页面跳转而非 iframe 内加载
- iframe 显示 “about:blank”,说明提交未命中目标
- 检查元素发现 iframe 的
name拼写与formtarget不一致(比如大小写、空格)——但这只是表象,根源是属性本身不支持
需要动态切换提交目标?用 JavaScript 控制 form.target
如果一个表单要有时提交到 iframe、有时提交到新窗口,不要依赖多个 formtarget,而是改 form.target:
const form = document.querySelector('form');
document.getElementById('toIframeBtn').addEventListener('click', () => {
form.target = 'resultFrame';
form.submit();
});
document.getElementById('toNewTabBtn').addEventListener('click', () => {
form.target = '_blank';
form.submit();
});
注意点:
- 必须在
submit()前设置form.target,设晚了无效 - 如果 form 有
target属性,JS 修改会覆盖它;提交后如需复位,得手动还原 - 某些旧版 Safari 对 iframe 提交响应的 Content-Type 敏感,建议后端返回
text/html或带结构的内容,避免空白页
真正起作用的是 form.target 和 iframe 的 name 配对,其余都是干扰项。别被 formtarget 的名字带偏。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











