通过复选框返回的对象 id 在 id 字符串中添加了额外的空间

Posted

技术标签:

【中文标题】通过复选框返回的对象 id 在 id 字符串中添加了额外的空间【英文标题】:object id returned via checkbox adds extra space in the id string 【发布时间】:2021-09-13 09:52:08 【问题描述】:

我正在创建一个待办事项列表,当我单击复选框时,它会返回已检查项目的 id,然后使用 findByIdAndRemove 方法从我的本地 mongoose 数据库中删除该项目,但它返回的 id 有与之相关的额外空间。我首先很困惑为什么我的 id 不正确,然后经过一些调试后我发现了这个问题,但我不知道为什么会这样。当我修剪字符串的最后一个字符时,它解决了我的问题,但为什么还要添加额外的空间?

很高兴知道是什么原因造成的。

复选框返回 item._id 的 ejs 代码

        <form action="/delete" method="POST">
        <div class="item">
          <input type="checkbox" name="checkbox" value="<%=item._id%> " onchange="this.form.submit()">
          <p><%=  item.name  %></p>
        </div>
      </form>
      <% ) %>

/delete 发布请求路由的 app.js 代码

app.post("/delete", function(req, res)

  let checkedItemId = req.body.checkbox;
  console.log(checkedItemId + "hii");  // outputs: 60dd7cafc9bfd91808c706a6 hii
                                       // expected: 60dd7cafc9bfd91808c706a6hii

  Item.findByIdAndRemove(checkedItemId, function(err) 
    if(!err) 
      console.log("successfully deleted item");
     else 
      console.log(err);
    
  );

  res.redirect("/");

);

【问题讨论】:

【参考方案1】:

value="&lt;%=item._id%&gt; " 这个空间导致了问题。删除它,你应该没事。

【讨论】:

以上是关于通过复选框返回的对象 id 在 id 字符串中添加了额外的空间的主要内容,如果未能解决你的问题,请参考以下文章

通过复选框过滤对象数组

JS操作数组,向数组中添加数据,第二个数据总是覆盖第一个数据怎么回事

Mybatis在insert时返回主键id

10.$和#的区别 | 11.添加对象时如何把生成的id返回

如何在 AngularJS 中使用收音机和复选框绑定到复杂对象?

使用 _id 字符串的 GraphQL 查询,对象 ID 存储在 MongoDB 中