这个问题措辞笨拙,所以请耐心解释。
我正在使用Node.js,Express和MongoDB。
以下是表单提交的后端代码:
router.post('/inputlog', function(req, res) {
Log.findOne({logTitle: req.body.logTitle}, function(err, existingLog) {
if(!existingLog) {
req.flash('errors', req.body.logTitle + ' was not found');
return res.redirect('/inputlog');
}
if(existingLog) {
Lot.findOneAndUpdate({logTitle: req.body.logTitle}, {
$push: {
OutdoorLogs: {
LogInput: {
logDate: req.body.logDate,
logInput: req.body.logInput
}
}
}
}, {safe: true, upsert: false}, function (err, logSuccess) {
if(err) {
req.flash('errors', 'Log was not inserted due to Error.');
return res.redirect('/inputlog');
}
if(logSuccess) {
req.flash('success', req.body.logTitle+ ' Log has been updated. ');
return res.redirect('/inputLog');
}
});
}
})
});
所有这一切是什么意思?基本上,我有一个输入日志的表单。您首先为日志添加标题。然后,它将在数据库(MongoDB)中搜索您输入的日志的标题。如果不存在此类日志标题,则会向用户发送错误。
如果日志标题确实存在,它会将“logDate”和“logInput”添加到该日志标题的数组中。
这一切都很好。但!如果我想在相同的时间输入多个日志(多个logDate和logInput),该怎么办?我设置表单的方式,我只能一次一个地输入一个新的日志,这里是我的表格供参考:
<form method="POST" action="/inputlog">
<div class='form-group'>
<label for="logTitle">Log Title</label>
<input type="text" name="logTitle" autofocus class="form-control uppercase" id="logTitle"/>
</div>
<div class='form-group'>
<label for="logDate">Log Date</label>
<input type="text" name="logDate" class="form-control logDate" id="logDate"/>
</div>
<div class='form-group'>
<label for="logInput">log Input</label>
<input type="text" name="logInput" class="form-control logInput" id="logInput"/>
</div>
<div class='form-group'>
<input type="submit" class="btn btn-default btn-primary pull-right" value="submit">
</form>
所以,再次,这个表单的设置方式,我一次只能输入一个 log 。如果我想一次输入20个不同的日志,我将不得不一次一个地输入(输入日志,点击提交,输入日志,点击提交等等)。
如何只用一次提交输入多个日志(条目)?
答案 0 :(得分:0)
为什么不重构表单,以便一旦完成一个条目,就会出现一组额外的输入。我会在每个输入上使用onblur
检查表单以确保每个输入都有一些文本,如果它确实运行了一个函数来添加一个额外的表单。为每个可以对应数组索引的表单组创建一个id,并使用字段推送一个对象。这样,如果稍后编辑它们,可以在提交之前修改它们。