Node.js Post不包括所有值
我正在使用node.js和jade,目前有一个简单的模板: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
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;