文档章节

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

lotozhou
 lotozhou
发布于 2015/11/27 15:01
字数 569
阅读 251
收藏 7
点赞 0
评论 1

        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
粉丝 8
博文 51
码字总数 51524
作品 0
苏州
程序员
加载中

评论(1)

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

暂无文章

流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
21分钟前
7
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
29分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
33分钟前
7
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
52分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部