为什么html5表单输入说可选时需要

时间:2014-05-24 22:26:35

标签: html5 node.js forms input

所以我有一个带输入字段的html5表单。可以说这些字段是名字,姓氏,电话,电子邮件和地址。

现在首先,最后和地址是必需的,而电话和电子邮件是可选的。我知道后端已正确配置。但是在html5表单上它不会让我提交没有电话或电子邮件,否则它会返回400错误。

如果我从html5表单中删除了该选项,它会让我提交它,或者我可以输入一个值=" "并将提交。我甚至可以使用CSS3标记字段:required和:optional并且它会正确显示但仍然不允许我提交。

现在我显然不能从html中删除可选项,因为有些用户可能需要这些字段,但我也不想发送默认值" "或" n / a"对于不需要它们的用户。我在这里做错了什么或者什么?我不知道发生了什么。

编辑2:这是一个node.js api,它使用Hapi.js和Joi验证,请求和couchdb。

编辑:我知道400是一个服务器错误,但如果我发布一个卷曲,省略了可选的那个,它会很好。当我从html中删除可选的那些时,它也很顺利,这就是为什么它没有意义。这是api的验证码服务器端。

handler: function(req, res) {
request({
        method: 'POST',
        uri: 'https://127.0.0.1:6984/banned',
        jar: cookieJar,
        strictSSL: false,
        json: {
            firstn: req.payload.firstn,
            lastn: req.payload.lastn,
            licno: req.payload.licno,
            phone: req.payload.phone,
            email: req.payload.email,
            address: req.payload.address,
            description: req.payload.description
        }
    },
    function(err, resp, body) {
        if (err) { res(err) };

        if (resp.statusCode === 401) {
            res(resp.statusCode + ' Please log in.');
        }
        else if (resp.statusCode === 201) {
            res(body);
        }
    });
},
validate: {
    payload: {
        firstn: Joi.string().required(),
        lastn: Joi.string().required(),
        licno: Joi.string().optional(),
        phone: Joi.string().optional(),
        email: Joi.string().optional(),
        address: Joi.string().optional(),
        description: Joi.string().required()
    }
}

1 个答案:

答案 0 :(得分:0)

所以一位朋友帮助我搞清楚了。发生的事情是,如果没有输入数据,html表单是否发送值为“”。这不是“”,“null”,“undefined”只是“”。这不是服务器的有效值,因此会引发400错误。修复它的代码是在验证和发送之前检查有效负载是否存在。