我需要发送一个包含大量复选框的非常长的表单。它们按区域分组,如下所示:
<fieldset>
<legend>Whatever1</legend>
<div class="checkbox-list">
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Arts"> Arts</label>
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Bars"> Bars</label>
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Books"> Books</label>
(more items)
</div>
</fieldset>
<fieldset>
<legend>Whatever2</legend>
<div class="checkbox-list">
<label class="checkbox inline"><input type="checkbox" name="Interests" value="Architecture"> Architecture</label>
<label class="checkbox inline"><input type="checkbox" name="Interests" value="Audio"> Audio/vídeo</label>
<label class="checkbox inline"><input type="checkbox" name="Interests" value="Business"> Business</label>
(more items)
</div>
</fieldset>
表单更长,但你明白了。
使用name="Hobbies" value="Arts"
我的django后端接收分组在Hobbies
数组中的所有复选框,这非常方便,但我也需要知道未选中的复选框。我知道hidden input trick,但它对我没用,因为我使用value
字段作为复选框分组的一部分。
关于我能做什么的任何想法?
答案 0 :(得分:3)
好吧,正如我猜您已经知道的那样,从根本上没有办法向浏览器询问哪些盒子未被攻击。责怪HTML表单的发明者......
以下是一些不会破坏分组逻辑的简单方法:
答案 1 :(得分:0)
您可以添加隐藏的输入字段,并在表单提交时使用jQuery使用包含未选中复选框值的数组填充隐藏输入的值:
$("form").on("submit", function(e) {
e.preventDefault();
// Create an array of unchecked Hobbies
var uncheckedValues = [];
$(this).find("input[name='Hobbies']:not(:checked)").each(function() {
uncheckedValues.push(this.value);
});
// Set the uncheckedValues array as hidden input value
$("#your-hidden-input").val(uncheckedValues);
alert($("#your-hidden-input").val());
// Handle the form submission
handleFormSubmit();
});
请参阅DEMO。
答案 2 :(得分:0)
如何为后端中的每个复选框设置默认的false值。如果浏览器已经传递了值,则可以将值更改为true。
答案 3 :(得分:0)
我已经解决了。这个想法是在IMSoP的回答中。这是我的解决方案,也许它可以帮助某人:
<fieldset>
<legend>Whatever1</legend>
<div class="checkbox-list">
<input type="hidden" name="Hobbies_Arts">
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Arts"> Arts</label>
<input type="hidden" name="Hobbies_Bars">
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Bars"> Bars</label>
<input type="hidden" name="Hobbies_Books">
<label class="checkbox inline"><input type="checkbox" name="Hobbies" value="Books"> Books</label>
(more items)
</div>
</fieldset>
有了这个,很容易处理django方面的列表。