JS实现实时输入验证

简介: JS的实时验证

当封装好一个实时输入的验证函数的时候,发现验证完成以后无法获得到结果,后续改为使用回调函数来获得值

function tipAlert(fields, Tip, regexs, msg, callback) {
  $(fields).on("input", function () {
    const fieldValue = $(fields).val();
    const $field = $(fields);
    const $tip = $(Tip);

    let isTrue = true;

    if (!regexs.test(fieldValue)) {
      // 如果匹配失败,设置边框颜色为红色
      $field.css("borderColor", "red");
      $tip.html(msg);
      isTrue = false;
    } else {
      // 如果输入合法,清除提示
      $field.css("borderColor", "");
      $tip.html("");
      isTrue = true;
    }

    // 如果字段为空,清除边框颜色和提示
    if (fieldValue === "") {
      $field.css("borderColor", "");
      $tip.html("");
      isTrue = false;
    }

    // 调用回调函数,传递验证结果
    if (callback && typeof callback === "function") {
      callback(isTrue); // 调用回调函数,传递isTrue
    }
  });
}

因为封装的函数复用性较差,于是将判断出来的结果全部存储在一个对象内,方便后续直接通过对象来操作

let validationState = {
  account: false, // 账户验证状态
  password: false, // 密码验证状态
};

使用callback来传递isTrue的值,即结果,随后直接在回调函数内部来进行得到结果后的操作

function callbacks(isTrue, field, btn, validationState) {
  // 更新字段验证状态
  validationState[field] = isTrue;
  // 默认所有验证状态都有效
  let allValid = true;
  for (let field in validationState) {
    if (validationState[field] !== true) {
      // 如果有任何字段无效,则设置为false
      allValid = false;
      //停止循环,减少性能消耗
      break;
    }
  }

  // 根据验证结果启用或禁用按钮
  if (allValid) {
    $(btn).attr("disabled", false); // 启用按钮
    $(btn).css("opacity", "1");
  } else {
    $(btn).attr("disabled", true); // 禁用按钮
    $(btn).css("opacity", "0.5");
  }
}

直接通过传入的参数来更改对象对应字段的值为回调函数传入的结果,同时声明一个变量作为开关,判断当对象内所有的键值内有一个不为true的时候,将开关关掉,否则开关不动,后续通过开关来开启或禁用按钮。

具体的使用示例如下:

tipAlert(
  "#account",
  ".Tips_account",
  /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/,
  "账户格式不符合",
  function (isValid) {
// 更新账户验证状态
    validationState.account = isValid; 
// 更新按钮状态
    updateSubmitButtonState("#log_btn"); 
    callbacks(isValid, "account", "#log_btn", validationState);
  }
);

第一个为要检索的输入框,第二个为输入框提示词的位置,第三个为检索的条件,第四个为回调函数,传入第一个函数验证判断的结果,并更改对象内的值,同时禁用按钮,随后调用判断函数,判断是否可以解禁按钮。

相关文章
|
JSON 算法 安全
Nest.js JWT 验证授权管理
Nest.js JWT 验证授权管理
235 3
Nest.js JWT 验证授权管理
egg.js 24.18参数验证
egg.js 24.18参数验证
108 0
egg.js 24.18参数验证
|
存储 JavaScript 前端开发
账号登录验证(原生js,本地存储)
账号登录验证(原生js,本地存储)
64 0
|
JavaScript 前端开发 UED
JavaScript中的输入验证与处理
JavaScript中的输入验证与处理
|
JavaScript 数据安全/隐私保护
JS正则验证密码
JS正则验证密码
98 0
|
4月前
|
存储 安全 API
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
这篇文章介绍了next-auth,一个为Next.js设计的身份验证库,支持多种认证方式,如电子邮件和密码、OAuth2.0提供商(如Google、GitHub、Facebook等)以及自定义提供商。文章包含了如何配置Github Provider以及会话管理,并提到了适配器Adapters在next-auth中的作用。最后,文章强调了next-auth的强大功能值得进一步探索。
288 10
|
8月前
|
移动开发 JavaScript 前端开发
JavaScript:验证输入
【9月更文挑战第02天】
116 6
|
8月前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
77 2
|
9月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
107 1
|
9月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
423 1