2015-08-25 93 views
1

我正在使用Node + Express + Jade渲染一些网页。在表单上有2个复选框。当表单完成POST提交,如果复选框被选中,我得到req.body.checkbox1 -> 'on',如果没有被选中,我得到req.body.checkbox1 -> undefinedNode Express Jade - 复选框布尔值

可以获取复选框值truefalse

这里是我的服务器端的测试代码

var bodyParser = require('body-parser'); 
var express = require('express'); 

var app = express(); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(express.static(__dirname + '/webroot')); 
app.set('views', __dirname + '/view'); 
app.set('view engine', 'jade'); 
app.listen(3001); 
app.get('/', function (req, res) { 
    res.render('test'); 
}); 

app.post('/config', function (req, res) { 
    console.log(req.body.t); 
    console.log(req.body.f); 
    res.redirect('/'); 
}); 

我的玉形式测试

form(action='/config', method='post') 
    input(type="checkbox", name="not_checked", checked=false) 
    input(type="checkbox", name="checked", checked=true) 
    input(type='submit') 

回答

1

你可以试试下面的玉形式

form(action='/survey/submission/test/config', method='post') 
    input(type="checkbox", name="not_checked", value="false") 
    input(type="checkbox", name="checked", checked, value="true") 
    input(type='submit') 

值将是字符串,所以你必须解析它。如果复选框没有检查属性,那么它将不会包含在发布请求主体中。所以在上面的表格中,只有选中的复选框会发送到下面。

req.body : {"checked":"true"} 

如果你打勾的两个复选框,然后这两个值将被发送如下

req.body : {"not_checked":"false","checked":"true"} 

您还可以添加验证对不确定的,只要没有复选框被选中

if(req.body.not_checked) { 
     console.log('not checked : ' + req.body.not_checked); 
    } 

    if(req.body.checked) { 
     console.log('checked : ' + req.body.checked); 
    } 
+0

谢谢你的提示,这个想法与无线电组可以一起想像我想要的。我将添加一个带有2个按钮(true和false)的收音机组,而不是复选框。 –

3

我正在工作通过这个最近的一个项目...

这里是形式:

form(action='/survey/submission/test/config', method='post') 
    input(type="checkbox", name="1") 
    input(type="checkbox", name="2") 
    input(type="checkbox", name="3") 
    input(type="submit") 

然后在节点javascript中可以通过它们的req.body.name找到它们。 如果选中其中一个框,则req.body.name将返回'on'。如果一个盒子没有被检查,它们是未定义的。 所以一个三元语句可以用来创建一个新的对象并将它们保存为一个数据库作为布尔值。

object = { 
    first: req.body.1 ? true : false, 
    second: req.body.2 ? true : false, 
    third: req.body.3 ? true : false 
}; 

希望这有助于任何人前来。我很高兴当我想通了

1

我今天满足这个问题,我有一个解决方案更干净(对我来说):

function(req, res){ 
    req.body.field = Boolean(req.body.field) 
} 
+0

你的答案看起来像一个通用的中间件。注册这样的中间件将是一个巨大的错误。你可以编辑它,使其更具体到这个问题? –

+0

我不明白,真正的问题是:“如何从Node/Express上的复选框获取布尔值”,所以我的回答是正确的?如果你认为不是,那就没有理由。 –