You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据MongoDB ID编辑指定用户数据时出现批量更新或undefined如何解决

问题根源

  • 你在循环遍历用户列表的过程中,每次都给全局唯一的更新按钮.update绑定了新的点击事件,循环执行多少次就绑定了多少个事件,点击更新时所有绑定的回调会依次执行,导致所有用户都被修改
  • 没有临时存储当前正在编辑的用户ID,调用更新接口时也没有传入正确的用户ID参数,而是传了DOM元素的ID,接口请求路径错误

修复步骤

第一步:新增全局变量存储当前编辑的用户ID

在代码最外层添加变量:

let currentEditUserId = ''

第二步:修改编辑按钮的点击事件逻辑

点击编辑按钮时,把当前行的用户ID存入全局变量,同时可以把用户原有数据回填到模态框输入框优化体验:

btn1edit.addEventListener("click", () => {
  // 存储当前编辑的用户ID
  currentEditUserId = item._id
  // 回填原有数据到模态框
  document.getElementById("upName").value = item.name
  document.getElementById("upEmail").value = item.email
  document.getElementById("upAddress").value = item.address
  editwindow()
});

注意:必须删除循环内给.update绑定事件的代码,不要在循环里绑定全局按钮的事件

第三步:全局仅绑定一次更新按钮的点击事件

把更新按钮的事件绑定移到tableShowUser函数外部,全局只绑定一次:

document.querySelector(".update").addEventListener("click", () => {
  // 直接传入存储好的当前编辑用户ID
  upDATE(currentEditUserId)
})

第四步:修改upDATE函数的接口请求逻辑

将原先传入的DOM元素ID替换为实际用户ID,拼接正确的后端更新接口路径:

function upDATE(editUserId) {
  let name = document.getElementById("upName").value;
  let email = document.getElementById("upEmail").value;
  let address = document.getElementById("upAddress").value;
  if (name == "" && email == "" && address == "") {
    alert("Please Enter Something in USER input field(s)!!");
  } else {
    // 替换为你实际的后端更新接口地址,将用户ID拼接到路径中
    axios
      .put(`/你的后端更新接口路径/${editUserId}`, {
        name,
        email,
        address,
      })
      .then((response) => {
        alert("User Updated Successfully");
        console.log(response.data);
        // 编辑完成清空存储的ID
        currentEditUserId = ''
        tableShowUser()
      })
      .catch((error) => {
        console.log(error);
      });
  }
  setTimeout(() => {
    document.getElementById("upName").value = "";
    document.getElementById("upEmail").value = "";
    document.getElementById("upAddress").value = "";
  },2000)
  cLose();
}

内容的提问来源于stack exchange,提问作者MFaiqKhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:03