这是一个常见的主题,但在这个特定的用例中,我一直无法找到解决方案。我在一个表单中有一个动态数量的复选框,正在提交给Node.js服务器。我的复选框看起来像这样:
<input type='hidden' name='ingredient[num]' value='off' /> //not currently in use, see below
<input type='checkbox' name='ingredient[num]' checked />
选中所有复选框后,服务器会收到类似这样的内容(在req.body.ingredient之后):
{ num: ['on','on','on'] }
如果取消选中部分或全部复选框,我希望它能收到类似数量的相应内容:
{num: ['on','off','off'] }
我尝试过使用值=&#39; off&#39;的隐藏输入。在我的复选框之前和之后,这还没有奏效。服务器同时接收&#39; on&#39;并且&#39;关闭&#39;检查时的值。我还试过了一个JavaScript解决方法(下面),但我还没有让它工作。有什么想法吗?
<script>
let form = document.getElementById('addIngredients');
form.addEventListener('submit', function(e) {
e.preventDefault();
let boxes = document.querySelectorAll('input[type=checkbox]:not(:checked)');
boxes.forEach(function(box) {
box.setAttribute('value', 'off');
});
form.submit();
})
</script>
编辑:这与建议的重复问题不同。使用隐藏输入时,正文解析器似乎不会将复选框分组为数组。例如,有三个框,全部选中,服务器正在接收[ 'off', 'on', 'off', 'on', 'off', 'on' ]