POST未选中复选框,其值为Node

Dav*_*vid 5 javascript forms checkbox node.js

这是一个常见的主题,但在这个特定的用例中,我一直无法找到解决方案.我在一个表单中有一个动态数量的复选框,正在提交给Node.js服务器.我的复选框看起来像这样:

<input type='hidden' name='ingredient[num]' value='off' /> //not currently in use, see below
<input type='checkbox' name='ingredient[num]' checked />
Run Code Online (Sandbox Code Playgroud)

选中所有复选框后,服务器会收到类似这样的内容(在req.body.ingredient之后):

{ num: ['on','on','on'] }
Run Code Online (Sandbox Code Playgroud)

当取消选中某些或所有复选框时,我希望它接收具有相同数量值的类似内容:

{num: ['on','off','off'] }
Run Code Online (Sandbox Code Playgroud)

我尝试在我的复选框之前和之后使用值='off'的隐藏输入,但这没有用.选中时,服务器会同时接收"开"和"关"值.我也尝试了一种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>
Run Code Online (Sandbox Code Playgroud)

编辑:这不是建议的重复问题.使用隐藏输入时,正文解析器似乎不会将复选框分组为数组.例如,有三个盒子,都经过检查,服务器正在接收[ 'off', 'on', 'off', 'on', 'off', 'on' ]