文档章节

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

lotozhou
 lotozhou
发布于 2015/11/27 15:01
字数 569
阅读 252
收藏 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)

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

暂无文章

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部