我有这个代码:
<form method="post">
<% for(let i = 0; i < websites.length; i++){ let website = websites[i]; %>
<fieldset id="site<%= i %>" style="padding-bottom: 0;
padding-top: 10px;
margin-bottom: 0;">
<label for="checkbox<%= i %>">Attach BuiltWith results (cost 1 credit)</label>
<input type="checkbox" name="checkbox<%= i %>" id="checkbox<%= i %>">
<p style="color: <% if(errorMsgs[i] === 'Wrong website address'){ %> red;<% } else { %> green;<% } %>
padding-bottom: 0;
padding-top: 0;
margin-bottom: 0;"
class="">
<%= errorMsgs[i] %>
</p>
<div class="">
<input class="website"
name="website<%= i %>"
id="<%= i %>"
value="<%= website %>"
type="text"/>
<a href="/websites/edit/<%= i %>"
class="btn btn-info hide">
Edit
</a>
<a href="/websites/delete/<%= i %>"
data-id="<%= i %>"
class="btn btn-danger confirmation removeBtn">
Remove
</a>
</div>
</fieldset>
<% } %>
<input type="submit"
id="generateReport"
class="btn btn-primary col-sm-offset-2"
value="Generate a report"
name="generateReport"
data-toggle="modal"
data-target="#exampleModal">
<!-- Save button created using Javascript. In case JS is disabled -->
</form>
<%%>
事情是EJS templating system 。这就是我在后端所做的事情:
router.post('/', (req, res, next) => {
var checkboxes = Object.keys(req.body)
.filter(key => key.startsWith('checkbox'))
.map(k => req.body[k]);
console.log(checkboxes);
res.redirect('/reports');
});
我想要实现的目标:如您所见,可能有很多网站要发送到后端。我需要为它们每个附加一个复选框。不幸的是,我现在得到的是:
[ 'on' ]
这不是我想要的。
我基本上需要知 Prop 体检查了哪些复选框。我该怎么做?
编辑:这是 req.body 输出
{ checkbox0: 'on',
website0: 'google.com',
website1: 'stackoverflow.com' }
这对我有用:
router.post('/', (req, res, next) => {
var bwIndexes = [];
var checkboxes = Object.keys(req.body)
.filter(key => key.startsWith('checkbox'))
.map(k => bwIndexes.push(k.slice(-1)));
console.log(bwIndexes);
console.log(req.body);
res.redirect('/reports');
});
最佳答案
如果您的索引在 0 到 9 之间,则以下内容将起作用
router.post('/', (req, res, next) => {
var bwIndexes = [];
var checkboxes = Object.keys(req.body)
.filter(key => key.startsWith('checkbox'))
.map(k => bwIndexes.push(k.slice(-1)));
console.log(bwIndexes);
console.log(req.body);
res.redirect('/reports');
});
即使索引超过 9,以下内容也能工作
router.post('/', (req, res, next) => {
var bwIndexes = [];
var checkboxes = Object.keys(req.body)
.filter(key => key.startsWith('checkbox'))
.map(k => bwIndexes.push(k.replace( /^\D+/g, '')));
console.log(bwIndexes);
console.log(req.body);
res.redirect('/reports');
});
关于javascript - 过滤特定复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50409880/