Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Post不包括所有值_Node.js_Pug_Forms_Http Post - Fatal编程技术网

Node.js Post不包括所有值

Node.js Post不包括所有值,node.js,pug,forms,http-post,Node.js,Pug,Forms,Http Post,我正在使用node.js和jade,目前有一个简单的模板: extends layout block content h1 #{title} br form(action="/updateingredient", method="post") table.table.table-striped.table-bordered tr td Name td Category td Available if

我正在使用node.js和jade,目前有一个简单的模板:

extends layout

block content
  h1 #{title}
  br

  form(action="/updateingredient", method="post")
    table.table.table-striped.table-bordered
      tr
        td Name
        td Category
        td Available
      if (typeof ingredients === "undefined")
        tr
          td
      else
        each ingredient in ingredients
          tr
            td #{ingredient.name}
            td #{ingredient.category}
            td
              input(type="checkbox", name="#{ingredient.id}", 
                value="#{ingredient.available}", checked=ingredient.available)
    button.btn(type="submit") Update Ingredients
提交此文件时,我在
upgradeComponents
中按预期点击:

updateIngredient: function (req, res) {
    console.log(req.body);
}
我的问题在于。文章只包含选中的复选框,而且复选框的值似乎总是
false
。我想那是因为那是表单发布之前的值

我更希望得到表单中的所有复选框值,无论是否选中。这可能吗

选中复选框时,
updateIngredient
方法的当前输出为我提供以下信息(当前仅测试一项):

{'b56a5f79-b074-4815-e7e0-4b746b2f65d8':'false'}

未选中时:

{ 'b2a4b035-8371-e620-4626-5eb8959a36b0': '' }
{}

编辑

查看构建的HTML,我看到一个项目:

<tr>
    <td>Ost</td>
    <td>Mælkeprodukt</td>
    <td>
        <input 
            type="checkbox" 
            name="b56a5f79-b074-4815-e7e0-4b746b2f65d8" 
            value="false" 
            checked="false">
    </td>
 </tr>

奥斯特
Mælkeprodukt

验证复选框HTML的构造是否正确

  • 在控制台中查找错误和警告
  • 确保复选框的选中值均为“真”或“假”
此示例包含工作语法:


在这里搜索了更多内容后,我找到了以下答案:

在发布HTML时,未选中的复选框似乎不是表单的一部分。这正是我所看到的

在走另一条路之前,我确实将检查过的代码更改为以下代码

checked=ingredient.available?"checked":undefined
这并没有改变任何东西,当取消选中时,也没有在我的表单帖子中提供任何数据

因此,我使用了JavaScript方法,在表单中添加了一个提交事件处理程序。我在我的javascripts文件夹中添加了一个新的
checkbox.js
文件,该代码取自:

我修改了我的表格,加入了一个ID:

form#updateform(action="/updateingredient", method="post")
并从复选框中删除该值:

input(type="checkbox", name="#{ingredient.id}",
    checked=ingredient.available?"checked":undefined)
现在,当值未选中时,我得到以下结果:

{ 'b2a4b035-8371-e620-4626-5eb8959a36b0': '' }
检查时:

{ 'b2a4b035-8371-e620-4626-5eb8959a36b0': 'on' }
现在,在我的方法中,我可以确定是否使用以下工具进行了检查:

var available = req.body[ingredient] === "on" ? true : false;

其中
成分
是关键。

嗯,阅读更多,在这方面似乎有一些奇怪的标准。例如,XHTML要求属性完整或完全不完整(等同于“false”),并且不支持使用:checked=“false”。因此,如果这就是问题所在,您将需要有条件地发出checked=“checked”或什么都不发出(视情况而定)。
var available = req.body[ingredient] === "on" ? true : false;