mackxu
子曰:学而时习之,不亦说乎?

表单增量验证

JavaScript代码:

 1 /**
 2  * JQuery+原生JavaScript
 3  */
 4 $(document).ready(function() {
 5     $("#btnSignUp").attr("disabled", true);            //禁用注册按钮
 6     //为每个待验证的字段添加onchange事件
 7     $("input.validation").each(function() {
 8         //为input 添加valid属性,并设定初值为false
 9         this.valid = false;                            
10         $(this).change(function(){
11             validateField(this);                        //验证输入的是否合法
12         });
13     })
14 });
15 /**
16  * ajax:由服务器判断字段是否合法
17  * 改变valid属性值
18  * @param {DOM} node
19  */
20 function validateField(node) {
21     var url = "formValidate.php?"+node.name+"="+node.value;
22     //var data = {$("node").attr("name"):encodeURIComponent($("node").val())};
23     //怎样确定是否执行成功,$.ajax替换提示错误
24     $.get(url, function(data) {
25         //处理返回成功的数据
26         //根据返回的数据判断输入是否合法
27         var arrInfo = data.split("||");
28         var $img = $(node).next("img");                //错误图标
29         //应先判断数组是否为空
30         //------
31         if (!eval(arrInfo[0])) {
32             //输入的数据不合法            
33             $img.attr("title", arrInfo[1]);            //提示的错误信息                    
34             //$img.css("display", "");                //css改不动!!        
35             $img.show();                            //显示错误图标,直到输入合法
36             node.valid = false;                        //改变valid值
37         }else {
38             $img.hide();                            //隐藏错误图标
39             node.valid = true;
40         }
41         $("#btnSignUp").attr("disabled", !isFormValid())
42     });                            
43 }
44 /**
45  * 根据valid的属性值,判断表单是否可以提交
46  * 如果有错误不能提交的
47  * @return boolean
48  */
49 function isFormValid() {
50     var btnValid = true;
51     $("input.validation").each(function() {
52         btnValid = btnValid && this.valid;        //有一个false全部false
53         console.log(this.valid);
54     })
55     return btnValid;
56 }
57 /**
58  * 这个函数有待扩展
59  * @param {} data
60  * @param {} statusText
61  * @param {} jqXHR
62  */
63 function saveResult(data, statusText, jqXHR) {
64     if (statusText == 'success'){ 
65         //1、可以判断data是否为空
66         //2、书本的方法
67         var arrInfo = data.split("||");
68         
69     }
70 }

后台脚本处理代码PHP

 1 <?php
 2     //表单增量验证
 3     /**
 4      * 只有用户名是否存在需要后台判断,其他只需js就可以了
 5      * js下载也需要时间的。。。
 6      */
 7     header("Content-type:text/html; charset=utf-8");
 8     $valid = FALSE;            //表单是否合法
 9     $message = "An unknown error occurred";
10     //只能判断null or true
11     //$username = isset($_GET['username']) or $_GET['username'];
12     if (isset($_GET['username'])) {
13         $username = $_GET['username'];
14         //检查用户名是否合法(长度、已占)
15         $usernames = array();                    //存储虚拟数据
16         $usernames[] = 'mackxu';
17         $usernames[] = 'Tom';
18         $usernames[] = 'Jim';
19         $usernames[] = 'Jane';
20         
21         if (in_array($username, $usernames)) {
22             $message = "用户名已存在";
23         } elseif (strlen($username) < 6) {
24             $message = "用户名不能少于6个字符";
25         } else {
26             $valid = TRUE;
27             $message = '';
28         }
29     } elseif (isset($_GET['password'])) {
30         $password = $_GET['password'];
31         //检查密码长度是否大于6
32         if (strlen(trim($password)) < 6) {
33             $message = "密码太短, 不安全";
34         }elseif (strlen(trim($password)) > 12){
35             $message = "密码过长";
36         }else {
37             $valid = TRUE;
38             $message = '';
39         }
40     } elseif (isset($_GET['confirePassword'])) {
41         //判断确认密码是否正确
42         //这个有问题,因为每次只发送一个键值对故不知道$password
43         /*$confirePassword = $_GET['confirePassword'];
44         if ($confirePassword != $password){
45             $message = '两次输入密码不一致';
46         }else {
47             $valid = TRUE;
48             $message = '';
49         }*/
50         $valid = TRUE;
51         $message = '';
52         
53     } elseif (isset($_GET['email'])) {
54         $email = $_GET['email'];
55         //判断邮箱是否合法
56         $pattern = '/^[_a-z0-9-]+(\.[_a-z0-9-])*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
57         if ( !preg_match($pattern, $email) ) {
58             $message = "邮箱不可用";
59         }else {
60             $valid = TRUE;
61             $message = '';
62         }
63         
64     } elseif (isset($_GET['birthday'])) {
65         
66         $date = strtotime($_GET['birthday']);
67         if (!is_numeric($date) or $date <0) {
68             $message = "输入的日期不合法";
69         }else {
70             $valid = TRUE;
71             $message = '';
72         }
73         
74     }
75     echo "$valid || $message";                //由值决定js的执行
76     
posted on 2012-10-30 13:38  mackxu  阅读(553)  评论(0编辑  收藏  举报