myesn

myEsn2E9

hi
github

HTML <form>: 使用 JavaScript 自定义表单验证

介绍#

image

在按照 Bootstrap - Forms - Validation<form> 中的可输入控件进行数据校验时,可以在控件上添加 requiredminlengthmaxlength 等常规通用的原生验证属性。

当我们有更复杂的业务逻辑时,还可以通过 JavaScript 自定义验证规则,这样就能实现表单验证自由了,本文将介绍如何实现。

使用方法#

function validate(inputID) {
  const input = document.getElementById(inputID);
  const validityState = input.validity;

  if (validityState.valueMissing) {
    input.setCustomValidity("你必须填满这个,哟!");
  } else if (validityState.rangeUnderflow) {
    input.setCustomValidity("我们需要一个更大的数字!");
  } else if (validityState.rangeOverflow) {
    input.setCustomValidity("太大了!");
  } else {
    input.setCustomValidity("");
  }

  // 立刻弹出 HTML 原生的控件验证提示
  input.reportValidity();
}

// 失去焦点后验证密码规则
$('#password').on('blur', function (e) {
    const password = $(this).val();
    // 一个由我们自定义的验证方法
    if (validatePassword(password)) {
        // 密码符合要求
        // 如果没有错误,需要将消息设置为空字符串,这样表单验证才能通过,也就是调用 checkValidity() 后返回 true
        this.setCustomValidity('');
    } else {
        // 密码不符合要求
        // 只要错误消息不为空,表单就不会验证通过(调用 checkValidity() 后返回 false),也不会被提交
        // 由于当前使用 Boostrap 的表单验证提示,所以这里给出的错误消实际上并不会显示在页面上,只是为了让当前控件不通过验证
        this.setCustomValidity('Passwords must match');
    }

    // reportValidity() 会立刻弹出 HTML 原生的控件验证提示,由于当前使用 Bootstrap 的验证提示,所以这里不调用它触发原生的验证提示
    //this.reportValidity();
});

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。