+发表新主题
查看: 5445|回复: 2

[HTML5开发] h5 - 表单验证validity属性

[复制链接]

[HTML5开发] h5 - 表单验证validity属性

[复制链接]
josh 发表于 2016-2-26 00:00:00 浏览:  5445 回复:  2 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1. validity属性

       * 通过该属性可以获取validityState对象

              * validityState对象提供了一系列的有效状态

              * 有效状态帮助完成表单验证

     * 有效状态

       * valid

          * true - 表示验证通过

                   * false - 表示验证不通过

       * valueMissing

           * 作用 - 验证值是否为空

                      * 结果

                     * true - 表示值为空(错的)

                       * false - 表示值不为空(对的)

                 * 配合required属性一起使用

       * patternMismatch

         * 作用 - 验证是否匹配正则表达式

                    * 结果

                      * true - 表示不匹配

                      * false - 表示匹配

              * 配合pattern属性一起使用

       * typeMismatch

         * 作用 - 验证元素类型是否匹配

            * 结果

                      * true - 表示不匹配

                      * false - 表示匹配

              * 配合emailurlnumber等元素使用

       * tooLong

         * 作用 - 验证元素值是否过长

                    * 结果

                      * true - 表示过长

                      * false - 表示正常

              * 匹配maxlength属性一起使用

      * rangeUnderflow

         * 作用 - 验证元素值是否过小

                    * 结果

                     * true - 表示过小

                     * false - 表示正常

                     * 配合min属性一起作用

      * stepMismatch

         * 作用 - 验证步长是否匹配

                    * 结果

                      * true - 表示不匹配

                      * false - 表示匹配

                      * 配合step属性一起使用

例如:

      

  1. <!doctype html>

  2. <html lang="en">

  3. <head>

  4.   <meta charset="UTF-8">

  5.   <title>有效状态</title>

  6. </head>

  7. <body>

  8.   <form>

  9. 用户名:<input id="user" type="text" required><br>

  10. 密码:<input id="pwd" type="text" pattern="^[0-9]{6,8}$"><br>

  11. Email:<input id="mail" type="email"><br>

  12. 年龄:<input id="age" step="5" type="number" min="20"><br>

  13. <input type="submit">

  14.   </form>

  15.   <script>

  16. var user = document.getElementById("user");

  17. user.onblur = function(){

  18. if(user.validity.valid){

  19. alert("验证通过.");

  20. }else if(user.validity.valueMissing){

  21. alert("用户名不能为空.");

  22. }

  23. }

  24. var pwd = document.getElementById("pwd");

  25. pwd.onblur = function(){

  26. if(pwd.validity.valid){

  27. alert("验证通过.");

  28. }else if(pwd.validity.patternMismatch){

  29. alert("密码输入有误.");

  30. }

  31. }

  32. var mail = document.getElementById("mail");

  33. mail.onblur = function(){

  34. if(mail.validity.valid){

  35. alert("验证通过.");

  36. }else if(mail.validity.typeMismatch){

  37. alert("Email输入有误.");

  38. }

  39. }

  40. var age = document.getElementById("age");

  41. age.onblur = function(){

  42. if(age.validity.valid){

  43. alert("验证通过.");

  44. }else if(age.validity.rangeUnderflow){

  45. alert("年龄过小.");

  46. }else if(age.validity.stepMismatch){

  47. alert("年龄有误.");

  48. }

  49. }

  50.   </script>

  51. </body>

  52. </html>
复制代码
效果:


231342xehpt6kn26fxd4j2.png

231342xehpt6kn26fxd4j2.png

231342xehpt6kn26fxd4j2.png

231342xehpt6kn26fxd4j2.png

231342xehpt6kn26fxd4j2.png


     * customError

         * 作用 - 判断是否使用了setCustomValidity()方法

                    * 结果

                       * true - 表示使用了setCustomValidity()

                       * false - 表示没有使用

                       * 配合setCustomValidity()方法使用

      * 自定义错误 - setCustomValidity()

         * 当调用该方法时,customErrortrue

                    * 如果正确的话,将该方法的内容设置为空



例如:

  1. <!doctype html>

  2. <html lang="en">

  3. <head>

  4.   <meta charset="UTF-8">

  5.   <title>自定义错误提示</title>

  6. </head>

  7. <body>

  8.   <form>

  9. <input id="data" type="text" pattern="^[0-9]{6}$" required>

  10. <input type="submit">

  11.   </form>

  12.   <script>

  13. var data = document.getElementById("data");

  14. data.onblur = function(){

  15. if(data.validity.valueMissing){

  16. data.setCustomValidity("输入不能为空.");

  17. }else if(data.validity.patternMismatch){

  18.    data.setCustomValidity("输入格式不正确.");

  19. }else if(data.validity.customError){

  20. data.setCustomValidity("");

  21. }

  22. }

  23.   </script>

  24. </body>

  25. </html>
复制代码
效果:

231342xehpt6kn26fxd4j2.png

231342xehpt6kn26fxd4j2.png


     * 注意事项

       * 使用HTML5中的验证属性的话,手动验证的逻辑不能编写在submit事件的处理函数中

         * 当验证属性有效时,submit事件不被触发



用户注册验证案例:

  1. <!doctype html>

  2. <html lang="en">

  3. <head>

  4.   <meta charset="UTF-8">

  5.   <title>用户注册</title>

  6. </head>

  7. <body>

  8.   <fieldset>

  9. <legend>用户注册</legend>

  10. <form>

  11. <table>

  12. <tr>

  13. <td>用户名:</td>

  14. <td><input id="user" type="text" required pattern="^[a-zA-Z]{6,12}$"></td>

  15. </tr>

  16. <tr>

  17. <td>密码:</td>

  18. <td><input id="pwd" type="text" required pattern="^[0-9]{6,8}$"></td>

  19. </tr>

  20. <tr>

  21. <td>年龄:</td>

  22. <td><input id="age" type="number" min="18" required></td>

  23. </tr>

  24. <tr>

  25. <td>email:</td>

  26. <td><input id="mail" type="email" required></td>

  27. </tr>

  28. <tr>

  29. <td>个人主页:</td>

  30. <td><input id="url" type="url" required></td>

  31. </tr>

  32. <tr>

  33. <td>出生日期:</td>

  34. <td><input id="birth" type="date" required></td>

  35. </tr>

  36. <tr>

  37. <td></td>

  38. <td><input type="submit" value="注册"></td>

  39. </tr>

  40. </table>

  41. </form>

  42.   </fieldset>

  43.   <script>

  44. /*

  45.     需求:

  46. * 用户名 - 不能为空,长度在6至12之间,必须为英文

  47. * 密码 - 不能为空,长度在6至8之间,必须为数字

  48. * 年龄 - 不能为空,最小为18岁

  49. * Email - 不能为空,格式正确

  50. * 个人主页 - 不能为空,格式正确

  51. * 出生日期 - 不能为空

  52. 要求:

  53. * 所有判断必须使用验证属性和有效状态

  54. * 如果验证不通过,使用setCustomValidity()方法设置自定义错误提示信息

  55. * 事件使用失去焦点

  56. */

  57. var user = document.getElementById("user");

  58. user.onblur = function(){

  59. if(user.validity.valueMissing){

  60. user.setCustomValidity("用户名不能为空.");

  61. }else if(user.validity.patternMismatch){

  62. user.setCustomValidity("用户名必须是6至12之间的英文.");

  63. }else if(user.validity.customError){

  64. user.setCustomValidity("");

  65. }

  66. }

  67. var pwd = document.getElementById("pwd");

  68. pwd.onblur = function(){

  69. if(pwd.validity.valueMissing){

  70. pwd.setCustomValidity("密码不能为空.");

  71. }else if(pwd.validity.patternMismatch){

  72. pwd.setCustomValidity("密码必须为6至8之间的数字.");

  73. }else if(pwd.validity.customError){

  74. pwd.setCustomValidity("");

  75. }

  76. }

  77. var age = document.getElementById("age");

  78. age.onblur = function(){

  79. if(age.validity.valueMissing){

  80. age.setCustomValidity("年龄不能为空.");

  81. }else if(age.validity.rangeUnderflow){

  82. age.setCustomValidity("年龄过小.");

  83. }else if(age.validity.customError){

  84. age.setCustomValidity("");

  85. }

  86. }

  87. var mail = document.getElementById("mail");

  88. mail.onblur = function(){

  89. if(mail.validity.valueMissing){

  90. mail.setCustomValidity("Email不能为空.");

  91. }else if(mail.validity.typeMismatch){

  92. mail.setCustomValidity("Email的格式有误.");

  93. }else if(mail.validity.customError){

  94. mail.setCustomValidity("");

  95. }

  96. }

  97. var url = document.getElementById("url");

  98. url.onblur = function(){

  99. if(url.validity.valueMissing){

  100. url.setCustomValidity("url不能为空.");

  101. }else if(url.validity.typeMismatch){

  102. url.setCustomValidity("url的格式有误.");

  103. }else if(url.validity.customError){

  104. url.setCustomValidity("");

  105. }

  106. }

  107. var birth = document.getElementById("birth");

  108. birth.onblur = function(){

  109. if(birth.validity.valueMissing){

  110. birth.setCustomValidity("请选择你的出生日期.");

  111. }else if(birth.validity.customError){

  112. birth.setCustomValidity("");

  113. }

  114. }

  115.   </script>

  116. </body>

  117. </html>
复制代码
效果:

231342xehpt6kn26fxd4j2.png
回复

使用道具 举报

4

主题

18

帖子

82

积分

出类拔萃

Rank: 5Rank: 5

积分
82
QQ
oaks 发表于 2016-2-28 18:01:59 显示全部楼层
其实我一直觉得楼主的品味不错!呵呵!
回复 支持 反对

使用道具 举报

0

主题

14

帖子

42

积分

豁然贯通

Rank: 5Rank: 5

积分
42
QQ
muerder 发表于 2016-2-28 20:15:24 显示全部楼层
社区不能没有像楼主这样的人才啊!
回复 支持 反对

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网