新增时校验用户输入防ID重复 如何在搜索更新场景禁用重复校验
解决方案
代码的核心问题是ID重复校验逻辑无差别拦截了更新场景,你已经预留了Z变量作为新增/更新状态的标记(搜索进入更新模式时Z会被设为1,默认新增场景Z=0),仅需要调整SaveDebt函数中的判断逻辑即可解决问题,具体修改如下:
核心修改步骤
原有逻辑是不管新增还是更新,只要ID在库中存在就直接拦截,我们调整为仅新增模式下触发ID重复校验,更新模式直接跳过该校验。
找到SaveDebt函数中所有表单校验通过后的逻辑段,原代码如下:
if (anumbercheck == true && anamecheck == true && cnumbercheck == true && dotcheck == true && dopcheck == true && apcheck == true && prodctsk == true && prodntsk == true && prodptsk == true && prodqtsk == true) { if (ANuDB.indexOf(ANu) == -1) { if (Z == 1) { // 原有更新逻辑 } else { // 原有新增逻辑 } // 成功提示、重置表单等操作 } else { alert("Account Number already exists! Please change the Account Number") } }
将其替换为以下代码即可:
if (anumbercheck == true && anamecheck == true && cnumbercheck == true && dotcheck == true && dopcheck == true && apcheck == true && prodctsk == true && prodntsk == true && prodptsk == true && prodqtsk == true) { let allowSave = true // 仅新增场景校验ID是否重复 if (Z === 0) { if (ANuDB.indexOf(ANu) !== -1) { allowSave = false alert("账号已存在,请修改后重试") } } if (allowSave) { if (Z == 1) { // 原有更新逻辑不变 for (i = 0; i < ANuDB.length; i++) { if (ANu == ANuDB[i]) { ANaDB[i] = ANa; CNDB[i] = CN; DOTDB[i] = DOT; DOPDB[i] = DOP; APDB[i] = AP; ProdcDB[i] = Prodc; ProdnDB[i] = Prodn; ProduDB[i] = Produ; ProdqDB[i] = Prodq; break; } } } else { // 原有新增逻辑不变 ANuDB.push(ANu); ANaDB.push(ANa); CNDB.push(CN); DOTDB.push(DOT); DOPDB.push(DOP); APDB.push(AP); ProdcDB.push(Prodc); ProdnDB.push(Prodn); ProduDB.push(Produ); ProdqDB.push(Prodq); } alert("账号:" + ANu + " 的记录已成功保存。\n\n\n即将跳转至首页。"); document.getElementById("delbutton").style = "display: none" document.getElementById("Resseett").click(); document.getElementById("Cannceel").click(); } }
可选优化(推荐)
如果需要支持用户更新时修改账号ID,同时避免新ID和其他已有记录重复,可以做如下调整:
- 页面新增一个隐藏的input控件,用于存储原始ID:
<input type="hidden" id="originalANu" value="">
- 修改
SearchDebt函数,在填充表单时同时给隐藏控件赋值:
// 原有填充表单逻辑后加一行 document.getElementById("originalANu").value = ANuDB[xID];
- 修改
SaveDebt中的校验逻辑:
let allowSave = true const originalANu = document.getElementById("originalANu").value if (Z === 0) { // 新增场景 if (ANuDB.indexOf(ANu) !== -1) { allowSave = false alert("账号已存在,请修改后重试") } } else { // 更新场景 // 仅当账号被修改时才校验新ID是否重复 if (ANu !== originalANu && ANuDB.indexOf(ANu) !== -1) { allowSave = false alert("新账号已存在,请修改后重试") } }
内容的提问来源于stack exchange,提问作者ajajaja
相关产品推荐
相关产品推荐

