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

JavaScript登录校验逻辑异常:选举投票系统多条件判断修复

修复选举投票系统登录校验逻辑问题

需求说明

需要实现以下4种登录校验逻辑:

  • 用户输入信息匹配votersDetails中的注册信息,且已在allElectionResult中存在(已投票):提示「您已完成过该操作,无法重复投票」(当前逻辑正常)
  • 用户输入信息匹配votersDetails中的注册信息,但未在allElectionResult中存在(未投票):允许登录并跳转至e-voting-votingPage.html(当前逻辑异常,未校验注册信息就直接跳转)
  • 用户输入信息未在votersDetails中(未注册):提示「请先注册」
  • 用户输入信息与votersDetails中的注册信息不匹配:提示「登录信息错误,请重试」

原代码问题分析

原signIn函数存在两个核心问题:

  1. 校验注册信息时,错误引用了不存在的字段:注册数据中没有id和key字段,实际应为email和password,导致正确的注册信息无法被识别。
  2. 逻辑分支未准确区分「未注册」和「信息不匹配」的场景,导致错误提示混乱。

修复后的完整代码

// 初始化 votersDetails 从 localStorage 获取
var votersDetails = [];
if (localStorage.localVoters) {
  var oldVoters = JSON.parse(localStorage.getItem("localVoters"));
  votersDetails = oldVoters;
}

// 注册提交函数
function submitRegistration() {
  if (firstName.value == "") {
    firstName.style.borderColor = "red";
  } else {
    var voters = {
      fname: firstName.value,
      lname: lastName.value,
      email: email.value,
      password: pass.value,
    };
    votersDetails.push(voters);
    localStorage.setItem("localVoters", JSON.stringify(votersDetails));
  }
}

// 初始化 allElectionResult 从 localStorage 获取
var allElectionResult = [];
if (localStorage.localResultsAll) {
  var oldAllResult = JSON.parse(localStorage.getItem("localResultsAll"));
  allElectionResult = oldAllResult;
}

// 投票完成提交函数
function finish() {
    for (let index = 0; index < votersDetails.length; index++) {
      disp.innerHTML = `${votersDetails[index].fname}`;
      disp4.innerHTML = `${votersDetails[index].email}`;
    }
   
    var allVotersElectionResult = {
      name: disp.innerHTML,
      myEmail: disp4.innerHTML,
    };
    allElectionResult.push(allVotersElectionResult);
    localStorage.setItem("localResultsAll", JSON.stringify(allElectionResult));
    window.location.href = "final.html";
}

// 修复后的登录校验函数
function signIn() {
  var votersId = loginId.value.trim();
  var votersKey = pass.value.trim();
  let isRegistered = false;
  let isCredentialsMatch = false;
  let matchedEmail = "";

  // 校验是否注册且账号密码匹配
  for (let voter of votersDetails) {
    if (voter.email === votersId) {
      isRegistered = true;
      if (voter.password === votersKey) {
        isCredentialsMatch = true;
        matchedEmail = voter.email;
        break;
      }
    }
  }

  // 校验是否已投票
  let hasVoted = false;
  for (let record of allElectionResult) {
    if (record.myEmail === matchedEmail) {
      hasVoted = true;
      break;
    }
  }

  // 分支逻辑处理
  if (isCredentialsMatch && hasVoted) {
    warningAlert.innerHTML = `<i class="fas fa-warning" id="faWarning"></i> Operation Declined. <p>您已完成过该操作,无法重复投票</p>`;
  } else if (isCredentialsMatch && !hasVoted) {
    window.location.href = "e-voting-votingPage.html";
  } else if (!isRegistered) {
    alert("请先注册");
  } else {
    alert("登录信息错误,请重试");
  }
}

修复说明

  1. 字段修正:将原代码中错误的id和key字段替换为注册数据实际存在的email和password,确保注册信息校验准确。
  2. 状态拆分:新增isRegistered(是否注册)和isCredentialsMatch(账号密码是否匹配)两个状态,明确区分不同场景。
  3. 逻辑分支优化:按「已匹配且已投票」→「已匹配未投票」→「未注册」→「信息不匹配」的顺序处理,完全覆盖需求中的4种情况。
  4. 输入处理:添加trim()去除输入首尾空格,避免因空格导致的校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:15:52