如果表单没有附加到文档 DOM,为什么 form.submit() 什么都不做?[复制]

Why does form.submit() do nothing if form is not attached to a document DOM? [duplicate]

提问人:gavenkoa 提问时间:5/31/2023 更新时间:5/31/2023 访问量:41

问:

我可以通过以下方式制作一个隐藏形式:style.display = 'none'

var form = document.createElement("form");
form.method = "POST";
form.action = "//test.local/login.php";
form.style.display = 'none';

我想与其隐藏,不如将表单排除在文档 DOM 之外,例如删除该行:

document.body.appendChild(form);

但是:

form.submit();

什么都不做。为什么表单需要附加到 DOM 才能工作?submit()

JavaScript 表单 DOM

评论

1赞 Barmar 5/31/2023
您是否在控制台中看到错误“表单提交已取消,因为表单未连接”?
0赞 gavenkoa 5/31/2023
最近的 Firefox 控制台中没有任何内容。
0赞 Pointy 5/31/2023
Internet Explorer 过去在处理隐藏元素作为表单发布的一部分方面非常奇怪;基本上,它把他们当作残疾人对待。我不知道它会如何回应整个表格被隐藏。但是,这是一个很容易解决的问题:如果您创建表单并设置为 -10000 之类的值,则表单实际上被隐藏,但浏览器认为它是“可见的”(而不是隐藏的)。position: absoluteleft
0赞 Barmar 5/31/2023
@Pointy 问题说隐藏有效,断开连接则不然。
0赞 Pointy 5/31/2023
@Barmar是的,我明白了,这只是切身有趣的信息。我曾经在我的 CSS 中保留一个“秘密”类,用于对需要隐藏但不隐藏的输入执行“屏幕外”操作。

答:

3赞 Quentin 5/31/2023 #1

该方法的规范规定它必须提交以下表格

如果窗体无法导航,则返回。

如果元素不是 a 元素(它是 )并且未连接则表单无法导航。 (它不是因为它是它自己的根,因为它没有附加到文档)。form

1赞 tmkiernan 5/31/2023 #2

从本质上讲,似乎表单必须以某种方式连接到 DOM 才能使事件有效。

@Hikarunomemory 在此处对此进行了更详细的介绍

https://stackoverflow.com/a/49994802/3381067

评论

1赞 Barmar 5/31/2023
如果您只是要发布指向其他问题的链接,请将其标记为重复问题。