Dojo学习笔记(十四):Dojo表单验证

简介:

    dojox/validate是一个包含了很多通用验证逻辑的工具集,比如检查email地址的合法性,邮政编码,电话号码等等。dojox/validate在新版本中已被弃用。

    dojox/validate可以直接使用一些基本的功能:

1
2
3
4
validate.isInRange(test, options);
validate.isNumberFormat(test, options);
validate.isText(test, options);
validate.isValidLuhn(test);

    这里的每一个方法(除了isValidLuhn)都可以接受一个额外的配置参数optons,来指定额外的验证信息。比如:isNumberFormat方法可以指定数字的格式,例如:

1
var  test = validate.isNumberFormat(someNum, { format:  "(###) ###-####"  });

    格式化信息也可以以数组的方式指定,例如:

1
2
3
var  test = validate.isNumberFormat(someNum, { 
     format: [ "### ##" "###-##" "## ###"
});

    除了上面的4个方法,dojox/validate还包含了很多其他的验证规则供你使用,例如:

1
2
3
validate.creditCard
validate.isbn
validate.web

    和其他很多dojo模块不太一样,require一个validate模块不会创建新的独立对象,而是为dojox/validate模块增加更多的方法。例如,如果你的应用需要web相关的一些验证,可以用如下代码:

1
2
3
require([ "dojox/validate/web" ],  function (validate) {
     validate.isEmailAddress(someAddress);
});

    最后,还有2个模块专门用于北美和加拿大相关的格式信息:dojox/validate/us和dojox/validate/ca。这些模块提供了国家相关的电话号码,邮政编码,社保号等信息的验证。

    如果你的应用使用直接的HTML表单Form,dojox/validate提供了一个称之为check的模块,可以让你去定义一个验证逻辑的配置文件(profile),你可以用这个配置文件来确保表单中的输入值都是有效的。这个配置文件是一个javascript对象,功能相当强大,它提供了filter来过滤表单值,定义了哪些表单域是必须的,定义了表单域的相互依赖(比如一个表单域依赖于另外一个表单域),定义了值的规则,以及需要确认的表单域(例如:密码值通常要输入两遍以确认)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE HTML>
<html lang= "en" >
<head>
     <meta charset= "utf-8" >
     <title>Demo: DojoX Validate and HTML Forms</title>
     <link rel= "stylesheet"  href= "dijit/themes/claro/claro.css" >    
     <style type= "text/css" >
         label  {
             display: inline-block;
             width: 140px;
         }
     </style>
</head>
<body  class = "claro" >
<h1>Demo: DojoX Validate and HTML Forms</h1>
<p style= "font-size: x-small" >
     * 是必填字段.
</p>
<form>
     <div>
         < label  for = "firstName" >First Name*</ label >
         <input type= "text"  name= "firstName"  id= "firstName"  value= ""  />
     </div>
     <div>
         < label  for = "lastName" >Last Name*</ label >
         <input type= "text"  name= "lastName"  id= "lastName"  value= ""  />
     </div>
     <div>
         < label  for = "email" >Email Address*</ label >
         <input type= "text"  name= "email"  id= "email"  value= ""  />
     </div>
     <div>
         < label  for = "emailConfirm" >Confirm Email*</ label >
         <input type= "text"  name= "emailConfirm"  id= "emailConfirm"  value= ""  />
     </div>
     <div>
         < label  for = "password" >Password*</ label >
         <input type= "password"  name= "password"  id= "password"  value= ""  />
     </div>
     <div>
         < label  for = "password2" >Confirm Password*</ label >
         <input type= "password"  name= "password2"  id= "password2"  value= ""  />
     </div>
     <div>
         < label  for = "phone" >Phone</ label >
         <input type= "text"  name= "phone"  id= "phone"  value= ""  />
     </div>
     <input type= "submit"  value= "Post!"  />
</form>
<h3>Form validation results</h3>
<div id= "result"  style= "border-top:1px solid #999;" ></div>
<!-- load dojo and provide config via data attribute -->
<script src= "dojo/dojo.js"  data-dojo-config= "async: true, parseOnLoad: true" ></script>
<script>
     require([ "dojo/dom" "dojo/_base/array" "dojo/_base/event" "dojo/query" "dojox/validate/web" "dojox/validate/us" "dojox/validate/check" "dojo/domReady!" ],  function (dom, baseArray, baseEvent, query, validate) {
         function  doCheck(form){
             var  results = validate.check(form, profile),
                     r = dom.byId( "result" );
             //通过验证
             if (results.isSuccessful()){
                 //  everything passed, log it to the result div
                 r.innerHTML =  "Everything passed validation!" ;
             else  {
                 var  s =  "" ;
                 //字段缺失
                 var  missing = results.getMissing();
                 if (missing.length){
                     s +=  '<h4>The following fields are missing:</h4>'
                     '<ol>' ;
                     baseArray.forEach(missing,  function (field){
                         s +=  '<li>'  + field +  '</li>' ;
                     });
                     s +=  '</ol>' ;
                 }
                 //输入字段无效
                 var  invalid = results.getInvalid();
                 if (invalid.length){
                     s +=  '<h4>The following fields are invalid:</h4>'
                     '<ol>' ;
                     baseArray.forEach(invalid,  function (field){
                         s +=  '<li>'  + field +  '</li>' ;
                     });
                     s +=  '</ol>' ;
                 }
 
                 r.innerHTML = s;
             }
         }
         //  wait until after our requires are actually loaded.
         profile = {
             trim: [ "firstName" "lastName" ],
             required: [ "firstName" "lastName" "email" "emailConfirm" "password" "password2" ],
             constraints: {
                 firstName:     validate.isText,
                 lastName:     validate.isText,
                 password:     validate.isText,
                 password2:     validate.isText,
                 email:      [validate.isEmailAddress,  false true ],
                 emailConfirm: [validate.isEmailAddress,  false true ],
                 phone:      validate.us.isPhoneNumber
             },
             confirm: {
                 "emailConfirm" "email" ,
                 "password2" "password"
             }
         };
 
         //  set up the form handler.
         var  f = query( "form" )[ 0 ];
         f.onsubmit =  function (e){
             baseEvent.stop(e);
             doCheck(f);
         };
     });
</script>
</body>
</html>

输出结果:

wKiom1RW7M2CQRekAAFU5QLE4is575.jpg

在基于Dijit的表单里使用dojox/validate    

    当然,你也可以结合dojox/validate和dijit一起使用,特别是dijit的ValidationTextBox。这里的关键是ValidationTextBox的validator方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!DOCTYPE HTML>
<html lang= "en" >
<head>
     <meta charset= "utf-8" >
     <title>Demo: DojoX Validation  with  Dijit Forms</title>
     <link rel= "stylesheet"  href= "dijit/themes/claro/claro.css" >
     <script src= "dojo/dojo.js"  data-dojo-config= "async: true, parseOnLoad: true" ></script>
     <style type= "text/css" >
         label  {
             display: inline-block;
             width: 140px;
         }
     </style>
     <script>
         require([ "dojo/parser" ,
             /* dojox/ validate resources */
             "dojox/validate/us" "dojox/validate/web" ,
             /* basic dijit classes */
             "dijit/form/CheckBox" "dijit/form/Textarea" "dijit/form/FilteringSelect" "dijit/form/TextBox" "dijit/form/ValidationTextBox" "dijit/form/DateTextBox" "dijit/form/TimeTextBox" "dijit/form/Button" "dijit/form/RadioButton" "dijit/form/Form" "dijit/form/DateTextBox" ,
             /* basic dojox classes */
             "dojox/form/BusyButton" "dojox/form/CheckedMultiSelect" ,
             "dojo/domReady!" ]);
     </script>
</head>
<body  class = "claro" >
<h1>Demo: DojoX Validation  with  Dijit Forms</h1>
<p style= "font-size: x-small" >
     * 是必填字段.
</p>
<form data-dojo-type= "dijit/form/Form"  method= "post" >
     <script type= "dojo/method"  event= "onSubmit" >
if ( this .validate()){
return  confirm( 'Form is valid, press OK to submit' );
} else {
alert( 'Form contains invalid data.  Please correct first' );
return  false ;
}
return  true ;
</script>
     <div>
         < label  for = "firstName" ><strong>First Name*:</strong></ label >
         <input type= "text"  required= "true"  name= "firstName"  id= "firstName"  placeholder= "Your Name"
                data-dojo-type= "dijit/form/ValidationTextBox"  missingMessage= "Ooops!  You forgot your first name!"  />
     </div>
     <div>
         < label  for = "website" ><strong>Website*:  </strong></ label >
         <input type= "text"  required= "true"  name= "website"  id= "website"  placeholder= "Your Website"
                data-dojo-type= "dijit/form/ValidationTextBox"  validator= "dojox.validate.isUrl"  />
     </div>
     <div>
         < label  for = "email" ><strong>Email*:</strong></ label >
         <input type= "text"  required= "true"  name= "email"  id= "email"  data-dojo-type= "dijit/form/ValidationTextBox"
                validator= "dojox.validate.isEmailAddress"  />
     </div>
     <div>
         < label  for = "bday" ><strong> Date  of Birth*:</strong></ label >
         <input type= "text"  required= "true"  name= "bday"  id= "bday"  data-dojo-type= "dijit/form/DateTextBox"  value= "7/5/1983"  />
     </div>
     <div>
         < label  for = "color" ><strong>Favorite Color: </strong></ label >
         <select name= "color"  id= "color"  data-dojo-type= "dijit/form/FilteringSelect" >
             <option value= "" >Select a Color</option>
             <option value= "Red" >Red</option>
             <option value= "Green" >Green</option>
             <option value= "Blue" >Blue</option>
         </select>
     </div>
     <div>
         < label  for = "toolkits" ><strong>Favorite Toolkits: </strong></ label >
         <select name= "toolkits"  id= "toolkits"  data-dojo-type= "dojox/form/CheckedMultiSelect"   multiple= "multiple"  style= "width:200px;" >
             <option value= "Dojo"  selected= "selected" >Dojo Toolkit</option>
             <option value= "Moo"  selected= "selected" >MooTools</option>
             <option value= "Prototype" >Prototype</option>
             <option value= "YUI" >YUI</option>
             <option value= "jQuery"  disabled>jQuery</option>
         </select>
     </div>
     <div>
         < label  for = "MyCheckBox" ><strong>Send Emails?:</strong></ label >
         <input id= "MyCheckBox"  name= "MyCheckBox"  data-dojo-type= "dijit/form/CheckBox"  checked= "false"   />
     </div>
     <div>
         < label ><strong>Email Format: </strong></ label >
         <input  type= "radio"  id= "radio1"  name= "format"  checked= "checked"  data-dojo-type= "dijit/form/RadioButton"  />HTML
         &nbsp;&nbsp;&nbsp;
         <input type= "radio"  id= "radio2"  name= "format"  data-dojo-type= "dijit/form/RadioButton"  />Text
     </div>
     <input type= "submit"  value= "Submit Form"  label = "Submit Form"  id= "submitButton"  data-dojo-type= "dijit/form/Button"  />
</form>
</body>
</html>

输出结果:

wKiom1RXMUyg-wdgAAHRRifXUAw620.jpg






     本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1571044,如需转载请自行联系原作者












相关文章
|
5月前
|
JavaScript 前端开发 安全
jQuery 第十一章(表单验证插件推荐)
jQuery 第十一章(表单验证插件推荐)
56 1
|
5月前
|
XML 缓存 JavaScript
jQuery 第十章(jQuery AJAX以及jQuery和其他框架兼容)
jQuery 第十章(jQuery AJAX以及jQuery和其他框架兼容)
26 0
|
8月前
|
JavaScript 前端开发
JavaScript 进阶5:WebAPI:DOM- 网页特效篇
JavaScript 进阶5:WebAPI:DOM- 网页特效篇
53 0
|
9月前
|
存储 JavaScript 前端开发
Dojo学习和常用知识
@[TOC](目录) Dojo 是一个流行的 JavaScript 库,用于开发 Web 应用程序。它提供了许多功能,如 DOM 操作、事件处理、动画效果、数据存储和许多其他实用功能。在今天的 Web 开发中,Dojo 仍然被广泛使用,尤其是在企业级应用程序开发中。 下面是一个详细的 Dojo 详解,包括代码实例。 # 一、Dojo 的基本概念 1. Dojo 模块 Dojo 模块是 Dojo 的基本构建块。每个模块都是一个 JavaScript 文件,它包含了实现特定功能的代码。模块可以分为两类:核心模块和扩展模块。 核心模块是 Dojo 库的基础部分,提供了许多基本的功能,如 DOM 操作
|
前端开发 JavaScript 程序员
【jquery Ajax 】art-template模板引擎的概念与使用
【jquery Ajax 】art-template模板引擎的概念与使用
124 0
【jquery Ajax 】art-template模板引擎的概念与使用
|
JavaScript
jQuery入门第四章(JQ 事件绑定 )
jQuery入门第四章(JQ 事件绑定 )
85 0
jQuery入门第四章(JQ 事件绑定 )
|
JSON 前端开发 JavaScript
Jquery(5)-Ajax速查与常用插件
Jquery(5)-Ajax速查与常用插件
|
Web App开发 JavaScript 前端开发
jQuery 表单验证扩展(一)
好长一段时间没有写js代码了,也好长时间没有写文章了。今天刚申请一个2M 的电信宽带,下午闲来无事写了一个 基于jQuery的表单验证插件。首先申明这个插件问题比较多,不过觉得这个东西很有必要。后期持续跟新中,先把自己写的插件原型拿出来晒晒! 再次申明,插件问题比较多,后期一个个来解决,请不要恶言相向。
916 0
|
前端开发 JavaScript
jQuery 表单验证扩展(五)
大概在一个月之前,自己尝试着写一个jQuery的表单验证插件,当初的目的并不是为了让这个插件流行起来,只是为了自己学习的需要。由于工作的问题,这个问题一直处于停留的状态。前些天报名参加了那个什么博客大赛,最近未写一篇博客,当然本文也不是了参加什么博客大赛而写,只是作为自己学习的积累。
1206 0
|
JSON JavaScript 前端开发
jQuery系列 第八章 jQuery框架Ajax模块
第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求、接收服务器端的响应以及执行回调等操作都是通过XMLHTTPRequest对象来完成的。
1313 0