HTMX 表单提交与表格

Posted

技术标签:

【中文标题】HTMX 表单提交与表格【英文标题】:HTMX form submission with a table 【发布时间】:2021-11-08 08:50:56 【问题描述】:

我正在尝试通过使用表格将Click to Edit 示例与 HTMX 一起使用。

每一行 (<tr>) 都是一个数据库记录,如下所示:

<tr hx-target="this" hx-swap="outerhtml">
<form>
        <td><input type="text" name="name" value="row.name"></td>
        <td><input type="text" name="email" value="row.email"></td>
        <td>
          <button class="btn" hx-put="/edit/row.id">Update<buttun>
          <button class="btn" hx-get="/view/row.id">Cancel</button>
        </td>
</form>
</tr>

不幸的是,当我在 flask 服务器上打印带有 request.form.keys 的请求正文时,我看到请求是空的 ([])

似乎按钮单击没有触发所有输入字段的表单提交。

如何让按钮点击触发表单提交并填充所有字段?

【问题讨论】:

【参考方案1】:

啊,刚刚记住了:您在这里使用表格。不幸的是,表格对其中的元素非常挑剔,我敢打赌表格在你放置的地方不起作用。如果您检查 DOM,我敢打赌,您会发现其中并没有真正的表单元素,因此 htmx 没有发现它包含输入。

您需要重新设计它以以不同的方式包含值,例如使用hx-include

类似这样的:

<tr hx-target="this" hx-swap="outerHTML">
        <td><input type="text" name="name" value="row.name"></td>
        <td><input type="text" name="email" value="row.email"></td>
        <td>
          <button class="btn" hx-put="/edit/row.id"
                  hx-include="closest tr">
              Update
          <button>
          <button class="btn" hx-get="/view/row.id">Cancel</button>
        </td>
</tr>

如果您愿意从表格行切换到 div,您拥有的原始代码应该可以正常工作。

这是一种不幸的情况,表格不是很灵活。

更新:@guettli 提醒我你可以包含任何元素,它会包含它下面的所有输入,所以你可以在 hx-include 属性中使用 closest tr。谢谢!

【讨论】:

我有一个使用 htmx 的地方,就像这样:每个 TR 标签的行为都像一个表单。工作正常。如果你想提供 oob 数据,那么你可能需要 htmx.config.useTemplateFragments 谢谢你,hx-include 属性就像一个魅力【参考方案2】:

你能从 chrome 或 firefox 控制台发布请求的样子吗?

总的来说,这看起来是正确的。

【讨论】:

错误在服务器端,email 和 name 字段没有被发布到服务器

以上是关于HTMX 表单提交与表格的主要内容,如果未能解决你的问题,请参考以下文章

php 表单不发送提交数据。但是仍然发送电子邮件和处理表格

如何判断form表单是不是提交成功

向 Google 表格提交表单时出错,导致 CORS 错误

如何在 Google 表单/表格中编辑表单提交的响应?

停止输入/返回键提交表单[重复]

layui表单如何提交下拉框的键值