【问题标题】:checkbox inputs are only submitted when is checked复选框输入仅在选中时提交
【发布时间】:2021-08-17 17:28:11
【问题描述】:

这是我的第一个 Django 项目,我有这个简单的表单,我想提交所有行值(选中或未选中),我面临的错误是它只发送 row{num} 值,如果它被选中。

<script>
function calc(elemId)
{
  var elem = document.getElementsByName(elemId)[0];
  if (elem.checked)
  {
      elem.value = 1;
  } else {
      elem.value = 0;
  }
}
</script>
<div class="container pt-3">
    <form action="." method="post">
        <table class="table table-hover">
        <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">Keyword</th>
                 <th scope="col">seller_items</th>
                <th scope="col">Total</th>
                <th scope="col">checked</th>
            </tr>
        </thead>
                {% csrf_token %}
                {{ form|crispy }}
            {%for i in data%}
                <tr >
                    <th scope="row">{{forloop.counter}}</th>
                    <td>{{i.keyword}}</td>
                    <td>{{i.seller_items}}</td>
                    <td>{{i.total_found}}</td>
                    <td>
                        {% if i.checked %}
                        <input type="checkbox" name="row{{i.id}}" value="1" checked="checked" onclick="calc('row{{i.id}}')"/>
                        {%else%}
                        <input  type="checkbox" name="row{{i.id}}" value="0" onclick="calc('row{{i.id}}')"/>
                        {%endif%}
                    </td>
                </tr>
            {% endfor %}
        </table>
        <div class="row">
            <div class="col-12">
                <button class="btn btn-primary float-right" type="submit">Update</button>
            </div>
        </div>
    </form>

按下按钮时提交表单,但发布请求中只有选中的复选框行

【问题讨论】:

    标签: javascript django


    【解决方案1】:

    这是网络浏览器的预期行为。如果复选框不是 False,则不会发送任何数据。如果是 True 'on' 将被发送。

    在清理表单时,Django 会自动将cleaned_data 值设置为False(如果它不存在)并处理数据整理。

    【讨论】:

    • 你会建议什么是解决这个问题的方法,理想情况下我希望它在表单中发布所有输入
    【解决方案2】:

    检查这个答案: https://stackoverflow.com/a/1992745/14091199

    您可以放置​​一个与不会被选中的复选框同名的隐藏输入。隐藏输入始终成功并发送到服务器,但如果选中该复选框,它将覆盖隐藏输入。

    <form>
        <input type='hidden' value='0' name='selfdestruct'>
        <input type='checkbox' value='1' name='selfdestruct'>
    </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-22
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      相关资源
      最近更新 更多