javascript - 过滤特定复选框

标签 javascript node.js express

我有这个代码:

<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/

相关文章:

javascript - 从 JS 中的构造函数返回 this

javascript - req.file 未定义(multer,node.js)

node.js - Passport.js session 丢失

express - 如何使用 mongoose 和 express 保存复选框中的 bool 值?

javascript - 按变量中定义的名称寻址元素

node.js - 为 .ejs 文件禁用 eslint

windows - 如何在 Windows 中使用某些预定义端口从 cmd 运行 node.js 应用程序

javascript - 为什么这个 html 不起作用

javascript - 与其他浏览器相比,我如何解决 safari 或 mac 中的字体粗细、文本太粗的问题?

javascript - Babel 加载器导致 npm build 崩溃