You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask模板循环中发送Post请求时传错元素ID的问题

问题解决:Flask循环中提交表单无法获取对应元素ID

问题根源

你所有的表单都使用了相同的ID is_admin,而document.getElementById()只会返回DOM中第一个匹配该ID的元素。所以不管点击哪一行的复选框,最终提交的都是循环生成的第一个表单的数据,导致后端收到固定的某个ID。

解决方案1:给每个表单设置唯一ID

修改模板代码,让每个表单的ID包含循环元素的唯一标识data.id,同时更新提交事件的目标ID:

{% for data in profile %}
<tr>
  <td>{{data.id}}</td>
  <td>{{data.email}}</td>
  <td>{{data.full_name}}</td>
  <td>{{data.given_name}}</td>
  <td>{{data.created_at | format_datetime('full')}}</td>
  <td>
    <form method="post" id="is_admin_{{data.id}}">
      <input hidden name="profile_id" value="{{data.id}}" />
      <input type="checkbox" name="toogle_off" id="{{data.id}}"
        onchange="document.getElementById('is_admin_{{data.id}}').submit()" {{
        "checked" if data.is_admin == True }} /> {{data.is_admin}}
    </form>
  </td>
</tr>
{% endfor %}

解决方案2:直接通过表单关联提交(更简洁)

不需要依赖ID,利用DOM元素的层级关系,通过this.form直接获取当前复选框所在的表单并提交,避免ID冲突问题:

{% for data in profile %}
<tr>
  <td>{{data.id}}</td>
  <td>{{data.email}}</td>
  <td>{{data.full_name}}</td>
  <td>{{data.given_name}}</td>
  <td>{{data.created_at | format_datetime('full')}}</td>
  <td>
    <form method="post">
      <input hidden name="profile_id" value="{{data.id}}" />
      <input type="checkbox" name="toogle_off" id="{{data.id}}"
        onchange="this.form.submit()" {{
        "checked" if data.is_admin == True }} /> {{data.is_admin}}
    </form>
  </td>
</tr>
{% endfor %}

这种方式更可靠,也省去了维护唯一ID的麻烦。

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:52:12