带有 table 的 HTMX 表单提交

HTMX form submission with a table

我正在尝试通过 table.

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 打印请求正文时,我发现请求是空的 ([])

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

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

你能post chrome 或 firefox 控制台的请求是什么样的吗?

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

啊,刚记起来:您在这里使用 tables。不幸的是 tables 对其中的元素非常挑剔,我敢打赌表格在你放置它的地方不起作用。如果你检查 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>

如果您愿意从 table 行切换到 div,您原来的代码应该可以正常工作。

这是一个不幸的情况,tables 不是很灵活。

update:@guettli 提醒我你可以包含任何元素,它将包含它下面的所有输入,所以你可以在 [=] 中使用 closest tr 11=] 属性。谢谢!