【问题标题】:How to send some value if unchecked for each checkbox with same name?如果未选中每个具有相同名称的复选框,如何发送一些值?
【发布时间】:2021-10-31 16:52:04
【问题描述】:

这里我有多个同名复选框。复选框可以添加到 n 号。次。

如果已经勾选,我想发送 1,如果不发送 0。

现在在我的 django 后端,我正在获取带有 request.POST.getlist('need_a') 的列表,如下所示。

如果全部选中 [1, 1, 1] 就可以了。

如果只检查一个,那么我得到的是[1] 而不是[1, 0, 0]

 <input name="need_a" type="checkbox" class="custom-control-input" 
 value="1" {% if some_condition %}checked{% endif %}/>

 <input name="need_a" type="checkbox" class="custom-control-input "
 value="1" {% if some_condition %}checked{% endif %}/>

 <input name="need_a" type="checkbox" class="custom-control-input" 
 value="1" {% if some_condition %}checked{% endif %}/>

【问题讨论】:

  • 嗨,这个例子中的 jQuery 在哪里?您可以使用 jQuery 轻松获取所需的数组,然后通过 ajax post 请求将其发送到您的 python 代码。
  • @Rüzgar 我无法为此编写 jquery

标签: javascript html jquery django


【解决方案1】:

这项工作。
只需在 jquery 中创建一个更改处理程序并证明它是否被检查。
在开发者工具中检查它。

$('input[type="checkbox"]').change(function() {
  if (this.checked) {
    $(this).val(1);
  } else {
    $(this).val(0);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
  <label for="scales">Scales</label>
</div>

<div>
  <input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
  <label for="horns">Horns</label>
</div>

<div>
  <input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
  <label for="Guitar">Guitar</label>
</div>

【讨论】:

  • 问题是,不勾选的时候,不发送值。即使你将值设置为 0,django 也不会收到。
  • 感谢您的回答,但没有奏效。
  • 好的。对不起,我不熟悉 django。
【解决方案2】:

您的方法不正确,您需要为未选中的字段创建一个具有默认值的隐藏输入,并按名称分组,请参见下面的示例:

<input name="need_a" type="hidden" value="0">
<input name="need_a" type="checkbox" class="custom-control-input" value="1" {% if some_condition %}checked{% endif %}>

<input name="need_b" type="hidden" value="0">
<input name="need_b" type="checkbox" class="custom-control-input " value="1" {% if some_condition %}checked{% endif %} />

<input name="need_c" type="hidden" value="0">
<input name="need_c" type="checkbox" class="custom-control-input" value="1" {% if some_condition %}checked{% endif %} />

在 django 中,您需要创建一个数组来尊重您的格式,例如:

formValues = [request.POST.getlist('need_a'), request.POST.getlist('need_b') , request.POST.getlist('need_c')]

然后您将获得[1,0,1] / [0,0,1] / etc 值。

这是浏览器发送给 django 的内容(need_a checkedneed_b not checkedneed_c checked):

need_a  […]
0   "0"
1   "1"
need_b  "0"
need_c  […]
0   "0"
1   "1

这就是我的后端(PHP)在请求中捕获的内容:

Array ( [need_a] => 1 [need_b] => 0 [need_c] => 1 ) 

【讨论】:

  • 不是所有的复选框都可以同名吗?
  • 不,这不是您使用复选框/收音机的方式,它们仅用于发送 1 个值。您发送格式和 django 捕获 [1,1,1] 的事实对我来说很奇怪,我使用 PHP 作为主要后端,除非您使用数组格式进行命名,否则不会捕获重复字段,例如 @987654330 @ 也作为一个数组分组在一个名称下,php 只捕获最后一个字段名。如果未选中复选框,我添加的隐藏字段就像后备一样。
  • 我已经更新了我的答案,你可以看到 need_b 只有 1 个值,即隐藏输入,因为它没有被检查。之后,我可以用我需要的那些字段构造一个数组。类似的方法可以在 django 中完成。如果我只有need_a,那么php 将只捕获该请求的最后一个值。请记住,不同服务器可以读取不同的发布请求,但差异并不大。
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2014-08-15
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多