赞
踩
h5新增的表单验证都存在了ValidityState对象中,该对象是通过validity 属性获取的,
该对象有11个属性;
1.valueMissing属性
必填的表单元素的值为空。对应required
2.typeMismatch属性
输入值与type类型不匹配,如email、number、url等
3.patternMismatch属性
输入值与pattern特性的正则不匹配。
4.tooLong,tooShort属性
对应字符长度maxlength,minlength
5.rangeUnderflow属性
输入的值小于min特性的值。
6. rangeOverflow属性
输入的值大于max特性的值。
7.stepMismatch属性
输入的值不符合step特性所推算出的规则。
8.customError属性
使用自定义的验证错误提示信息。
有时候,不太适合使用浏览器内置的验证错误提示信息,需要自己定义。当输入值不符合语义规则时,会提示自定义的错误提示信息。
通常使用setCustomValidity()方法自定义错误提示信息:setCustomValidity(message)会把错误提示信息自定义为message,
此时customError属性值为true;setCustomValidity("")会清除自定义的错误信息,此时customError属性值为false。
9.valid
当前输入是否有效
10.badInput
输入无效,如number框输入abc
另外:
checkValidity方法用来检测表单或元素的输入是否有效。
input的一些属性方法:
pattern:规定用于验证输入字段的正则表达式。
oninvalid:提交的input元素的值为无效值时(这里是正则验证失败),触发oninvalid事件。oninvalid属于Form 事件。
setCustomValidity():这个是HTML5内置的JS方法,用来自定义提示信息
maxlength:限定input最大输入长度
oninput:该事件在 input 或 textarea 元素的值发生改变时触发。
novalidate=“novalidate” 禁用验证.作用于表单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form > <p><label for="runnername">Runner:</label> <input id="runnername" name="runnername" type="text" /> </p> <!--html5自带的验证 --> <p>姓名:<label><input type="text" name="" required="required" pattern="[\u4e00-\u9fa5]{2,4}" placeholder="请输入姓名" oninvalid="setCustomValidity('真实姓名必须是中文,且长度不小于2,不大于4')" oninput="setCustomValidity('')"></label></p> <p>密码:<label><input type="password" name="" required="required" pattern="^[a-zA-Z0-9]\w{5,19}$" placeholder="请输入密码" oninvalid="setCustomValidity('6~20字母数字或下划线')" oninput="setCustomValidity('')"></label></p> <p>身份证号:<label><input type="text" name="" required="required" pattern="^([0-9]){18}(x|X)?$" placeholder="请输入身份证号" oninvalid="setCustomValidity('请输入正确的身份证号码')" maxlength="18" oninput="setCustomValidity('')"></label></p> <p>手机号码:<label><input type="tel" name="" required="required" maxlength="11" pattern="^(0|86|17951)?1[0-9]{10}" placeholder="请输入手机号" oninvalid="setCustomValidity('请输入11位手机号码')" oninput="setCustomValidity('')"></label></p> <!--multiple,支持输入多个邮箱,用逗号分隔;--> <p>邮箱:<label><input type="email" name="" required="required" multiple="multiple" placeholder="请输入邮箱" ></label></p> <p>时间:<label><input type="date" name="" required="required" pattern="" placeholder="请输入时间" ></label></p> <p>网址:<label><input type="url" name="" required="required" pattern="/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/" placeholder="请输入网址" ></label></p> 自动获取焦点: <input type="text" name="user_name" autofocus="autofocus" /><br /> <input type="submit" name="提交"> </form> <br /><br /><br /><br /> <form > minlength:<input type="text" minlength="2" maxlength="4" /><br /> 姓名1:<input type="text" name="name" required="required" placeholder="请输入姓名" pattern="[\u4e00-\u9fa5]{2,5}" /> <br /> <!--如果想自定义错误的提示语,使用oninvalid="setCustomValidity('姓名需为中文');" 但是这种,如果自定了提示语,那么非空验证也会是这个提示语,且及时验证通过,设置的提示语不会主动情况,所以需要手动清除错误信息 才能保证校验通过; --> 姓名2:<input type="text" name="name" required="required" placeholder="请输入姓名" pattern="[\u4e00-\u9fa5]{2,5}" oninvalid="setCustomValidity('请输入中文2-5位');" oninput="setCustomValidity('')" /> <!--改进--> <br /> 姓名3:<input type="text" name="name" required="required" placeholder="请输入姓名" pattern="[\u4e00-\u9fa5]{2,5}" oninvalid="checkName(this);" /> <!--自定义方法验证--> <br />年龄:<input type="number" id="age" name="age" value="10" onblur="checkAge()" /> <br /><input type="submit" /> </form> <script> function checkAge () { var age= document.getElementById("age"); if(age.value==''){ alert('请输入数字!'); return false; }else if(!age.checkValidity()){ alert('请输入合法数字'); return false; } } function checkName(inputelement) { console.log(inputelement.validity); //这个可以看做通用判断属性,无论什么属性,只有不符合条件,就false // alert(inputelement.validity.valid); //非空判断 // if(inputelement.value==''){ // inputelement.setCustomValidity('请输入中文!'); // return; // }else{ // inputelement.setCustomValidity(""); // return; // } //或者使用非空属性判断,这个时候需要input设置了required属性才行 // if(inputelement.validity.valueMissing){ // inputelement.setCustomValidity('请输入中文!'); // } //使用具体的属性,非空判断可以用自带的判断,不需要自已写 if(inputelement.validity.patternMismatch) { inputelement.setCustomValidity('请输入中文2-5位'); } else { inputelement.setCustomValidity(""); return true; } } </script> </body> </html>
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。