javascript - 为什么不能提交未呈现的表单?

标签 javascript jquery forms post

有没有办法提交未渲染的 form

我有一个特定的场景,我想向服务器提交一个动态表单。到目前为止,我已经通过添加 form 实现了这一点。到 body使用 jQuery 创建后.它工作完美,但我想知道为什么我无法提交 in memory form不渲染到 DOM .

以下是我试过的代码片段:

var action_url = "/post-url";
$(`
  <form action=${action_url} method="POST">
    <input type="text" value="name1" name="name1"/>
    <input type="text" value="name2" name="name2"/>
    <input type="text" value="name3" name="name3"/>
  </form>
`).appendTo('body').submit();

那么,为什么我不能像下面那样做:

var action_url = "/post-url";
$(`
  <form action=${action_url} method="POST">
    <input type="text" value="name1" name="name1"/>
    <input type="text" value="name2" name="name2"/>
    <input type="text" value="name3" name="name3"/>
  </form>
`).submit();

当我运行上面的代码时,在控制台中收到以下警告消息:

Form submission canceled because the form is not connected

最佳答案

当我们试图将元素插入到文档中时,它会在附加到文档之前创建一些由文档片段缓存的DOM节点。文档片段缓存的节点可以注册事件处理程序,也可以被触发,但是submit()的算法会有点不同。

文档片段中的 DOM 节点不是事件文档树结构的一部分,并且根据 HTML standard documentation , 如果表单未连接(关联、创建或任何其他类似术语)到浏览上下文(文档),则提交过程将被取消。

进一步阅读:

Form submission algorithm

DocumentFragment

关于javascript - 为什么不能提交未呈现的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49993382/

相关文章:

php - 访问 twig 中未映射的表单字段(Symfony 2.3)

javascript - 使用javascript使表单元素消失

php - 具有多对多实体的 Symfony REST API 表单集合

javascript - jquery 验证 1.8.1 "jQuery"是未定义的错误 IE8

javascript - 如何使用 ds.js 改进 D3noob 教程生成的图表

javascript - 如果超出视口(viewport),如何移动绝对定位元素?

javascript - 响应 jquery 改变宽度

javascript - 动态变量名称javascript MVC

javascript - React 似乎在浏览器中渲染之前转义了 HTML,导致它在页面中显示为代码

javascript - $.scrollTo 到 div 不适用于我当前的 JS