JavaScript 表单 | 菜鸟教程
https://www.runoob.com/js/js-validation.html
JavaScript 表单验证 | 菜鸟教程
https://www.runoob.com/js/js-form-validation.html
JavaScript 验证 API | 菜鸟教程
https://www.runoob.com/js/js-validation-api.html

引文说明:第一篇其实是表单验证2类方式的简介,名字叫“表单”其实不太合理;第二篇是JS自定义判断方式;第三篇是HTML5新增的约束验证方式。

元素自带约束属性的使用

表单具体应该是input元素有对输入值的约束性的元素:disabled、max、min、pattern、type、required。

如果表单元素有约束性属性被设置,那么就按照这个对象的checkValidity()方法来判断:

checkValidity()方法:符合true,不符合false,

对象.checkValidity()== true //说明符合,
对象.checkValidity()== false //不符合

上面checkValidity()方法不够具体,用if再去判断具体情况比较麻烦。还好有现成的validity属性(值也是true和false)提供具体的判断,并且有对应的validationMessage属性值(string类型的默认提示信息)可以直接使用:

对象.validity.rangeOverflow == true//为真时,表明大于max设定的最大值
//这时对应的ValidationMessage值
对象.validationMessage//值:值必须小于或等于 300。(注:300是HTML元素max属性设定值)

validity属性和validationMessage的默认值(根据系统语言而不同),列表如下:

HTML元素约束属性 validity属性 validationMessage中文值 validationMessage英文值
required: valueMissing 请填写此字段。 Please fill out this field.
type="number": typeMismatch number时其他字符无法输入测不了,email时错误信息为: Please include an ‘@’ in the email address. ‘default’ is missing an ‘@’.
min="100": rangeUnderflow 值必须大于或等于 100。 Value must be greater than or equal to 100.
max="300": rangeOverflow 值必须小于或等于 300。 Value must be less than or equal to 300.
step="3": stepMismatch 适用于number、range、date、datetime、datetime-local、month、time 和 week Please enter a valid value. The two nearest valid values are 100 and 103.
pattern="[A-Za-z]{3}": patternMismatch 使用正则表达式。 Please match the requested format.
maxlenth="300": tooLong type是文本时可用(暂定) 超出长度无法输入,暂未测试tooLong和Message的值
如果都符合: valid 空字符 效果等同”
这个是特例: customError 自定义错误提示后,customError值一直是false 下面会讲

补记:如果type是number,max或min、step都设置,如果都有错,那么优先显示max或min的错误提示。其他的优先级暂未测试。

如果想自定义错误提示信息,可以使用setCustomValidity()方法:

if(rangeOverflow){
setCustomValidity('超过许愿数量,想得太美!')
}

想查看一个元素是否可以应用“约束验证”,可以查看其willValidate属性。以下定义和示例来自:

HTMLObjectElement.willValidate – Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement/willValidate

The willValidate read-only property of the HTMLObjectElement interface returns a boolean value that indicates whether the element is a candidate for constraint validation. Always false for HTMLObjectElement objects.

var Boolean = HTMLObjectElement.willValidate;

那么,我感觉挺奇怪,这里似乎很复杂,有重复估计是给想自己写错误提示的人提供方便吧,免去自己写代码判断情况,就通过validity.属性的方式给概括了。

//给setCustomValidity()参数为'',是规定的一个取消自定义的方式;
//之所以先开头取消自定义,是因为点击第二次按钮的时候,checkValidity()总会给出false值;
//checkValidity()之前使用setCustomValidity('XXX'),会干扰checkValidity()判断,总会返回false;第二次点击按钮重复执行函数,就相当于在第二次checkValidity()之前使用了setCustomValidity(),除非关闭网页

obj.setCustomValidity('')
if (obj.checkValidity()){
    alert('许愿数量OK,马上实现!')
    else {
        if(obj.validity.rangeOverflow){
        obj.setCustomValidity('超过许愿数量,想得太美!')}
        else if(obj.validity.valueMissing){
        obj.setCustomValidity('数量为0,为啥不许愿呢?')}
        //.............
        alert(obj.validationMessage)
}

JS自定义约束

通过获取表单元素的值,通过JS判断输入值是否符合要求。
下面的网站中有必填和Email格式验证2个例子。
JavaScript 表单验证 | 菜鸟教程
https://www.runoob.com/js/js-form-validation.html



扫一扫 手机查看

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注