文档章节

HTML5实战应用:如何让表单验证更友好

lotozhou
 lotozhou
发布于 2015/11/27 15:01
字数 569
阅读 253
收藏 7

        HTML5表单验证给前端人员带来了便利,但是在用户体验上存在一些缺陷,默认的提示对用户很不友好,无法准确的获取想要的信息。好在在接口设计的时候提供了setCustomValidilty方法可以自定义提示信息。这是一个好消息,但也存在一些弊端,需要让开人员做额外的一些处理才达到真正想要的目的。
接下来通过以下示例来阐述方法的应用。

未调用setCustomValidity()方法

<!DOCTYPE html>  

 <html>  

 <head>  

     <mata charset="utf-8">  

     <title>form test</title>  

 </head>  

 <body>  

     <form name="test" action="." method="post">  

         <input type="text" required pattern="^\d{4}[        DISCUZ_CODE_21        ]quot; placeholder="请输入代码" >  

         <button type="submit">Check</button>  

     </form>  

 </body>  

 </html> 

执行结果:
A:未输入数据

1336530769_261.jpg

B:不匹配

1336530790_161.jpg

这两个结果都匹配了。但是不匹配这里的提示方案案与预想的不符合。

通过调用setCustomValidity方法来优化提示文案

<!DOCTYPE html>  

 <html>  

 <head>  

     <mata charset="utf-8">  

     <title>form test</title>  

 </head>  

 <body>  

     <form name="test" action="." method="post">  

         <input type="text" required pattern="^\d{4}[        DISCUZ_CODE_22        ]quot; placeholder="请输入代码" >  

         <button type="submit">Check</button>  

     </form>  

 <script type="text/javascript">  

     document.querySelector("input").setCustomValidity("请输入4位数字的代码");  

 </script>  

 </body>  

</html> 

执行结果:
A:为空

1336531076_33.jpg

B:不合法

1336531092_68.jpg

C:合法

1336531105_8.jpg

从三个操作来看,调用了setCustomValidity方法后,原生的表单验证罗辑都返回false了。悲剧。
再看看接口属性的变化

调用之前:
A)

1336531622_37.jpg

B)

1336531668_55.jpg

C)

1336531785_56.jpg

调用之后:
A)

1336531871_90.jpg

B)

1336531922_37.jpg

C)

1336531977_93.jpg

从上面的截图可以看到validationMessage没清空,valueMissing和patternMismatch都已经验证通了。

总结一下:
从面上可以看出,验证通过与否除了跟validity接口下的属性相关外,还跟validationMessage是否有值有关系。只有当validity接口下的属性(customError除外)都为false并且validationMessage为空时才算验证通过。

优化后的代码:

<!DOCTYPE html>  

 <html>  

 <head>  

     <mata charset="utf-8">  

     <title>form test</title>  

 </head>      

 <body>  

     <form name="test" action="." method="post">  

         <input type="text" required pattern="^\d{4}[        DISCUZ_CODE_23        ]quot; oninput="out(this)" placeholder="请输入代码" >  

         <button type="submit">Check</button>  

     </form>  

 <script type="text/javascript">  

 function out(i){  

     var v = i.validity;  

     if(true === v.valueMessing){  

         i.setCustomValidity("请填写些字段");  

     }else{  

         if(true === v.patternMismatch){  


             i.setCustomValidity("请输入4位数字的代码");  

         }else{  

             i.setCustomValidity("");  

         }  

     }  

 }  

 </script>  

 </body>  

 </html> 







© 著作权归作者所有

lotozhou
粉丝 9
博文 51
码字总数 51524
作品 0
苏州
程序员
私信 提问
加载中

评论(1)

命运交响
命运交响
不错,值得收藏!

暂无文章

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部