知问前端——验证插件(三)

   使用remote:url,可以对表单进行ajax验证,默认会提交当前验证的值到远程地址。如果需要提交其他的值,可以使用data选项。

   新用户注册时,如果用户名已被占用,则及时返回用户名已占用的信息。应当使用ajax验证。

   index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>知问前端</title>
    <script type="text/javascript" src="jquery-1.12.3.js"></script>
    <script type="text/javascript" src="jquery-ui.js"></script>
    <script type="text/javascript" src="jquery.validate.js"></script>
    <script type="text/javascript" src="index.js"></script>
    <link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico" />
    <link rel="stylesheet" type="text/css" href="jquery-ui.css" />
    <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
    <form id="reg" action="123.html">
        <p>账号:<input type="text" name="user" id="user" /></p>
        <p>密码:<input type="text" name="pass" id="pass" /></p>
        <p><input type="submit" value="提交" /></p>
    </form>
</body>
</html>

   style.css:

.valid {
    background: url(img/reg_succ.png) no-repeat right;
}
.abc {
    border: 5px solid green;
}

   user.php:

<?php
    
    //账号被占用
    if($_GET['user'] == 'liayun') {
        echo 'false';
    } else {
        echo 'true';
    }
    
?>

   注意:远程地址只能输出'true'或'false',不能输出其他值。

   使用ajax验证,jQuery代码如下:

$(function() {

    $("#reg").validate({
        submitHandler:function(form) {
            alert("验证成功,准备提交!");
        },
        rules:{
            user:{
                required:true,
                minlength:2,
                remote:"user.php" //连接远程地址
            },
            pass:{
                required:true,
                minlength:6
            }
        },
        messages:{
            user:{
                required:"账号不得为空!",
                minlength:"账号不得小于{0}位!",
                remote:"账号被占用!"
            },
            pass:{
                required:"密码不得为空!",
                minlength:"密码不得小于{0}位!"
            }
        }
    });

});

   如果要同时传递多个值到远程端,即用户登录时,如果用户名或密码错误,则会给用户一定的提示。

   user.php:(若使用post方式提交)

<?php
    
    if($_POST['user'] == 'liayun' && $_POST['pass'] == '123321') {
        echo 'true';
    } else {
        echo 'false';
    }
    
?>

   jQuery代码如下:

$(function() {

    $("#reg").validate({
        submitHandler:function(form) {
            alert("验证成功,准备提交!");
        },
        rules:{
            user:{
                required:true,
                minlength:2,
            },
            pass:{
                required:true,
                minlength:6,
                remote:{
                    url:"user.php",
                    type:"post",
                    dateType:"json",
                    data:{
                        user:function() {
                            return $('#user').val();
                        }
                    }
                }
                
            }
        },
        messages:{
            user:{
                required:"账号不得为空!",
                minlength:"账号不得小于{0}位!",
            },
            pass:{
                required:"密码不得为空!",
                minlength:"密码不得小于{0}位!",
                remote:"账号或密码不正确!"
            }
        }
    });

});

   jquery.validate.js提供了一些事件触发的默认值,这些值呢,大部分建议是不用更改的。仅作了解。

   1.取消提交验证,默认是true。

onsubmit : false, //默认是true

   注意:设置为false会导致直接传统提交,不会实现验证功能,一般是用于keyup/click/blur验证提交。

   2.设置鼠标离开不触发验证

onfocusout : false, //默认为true

   如果默认,输入比如"1"这样的错误字符串,鼠标一旦离开,即验证!反则,置为false,鼠标离开不验证,没什么鸟用!

   3.设置键盘按下弹起不触发验证

onkeyup : false, //默认为true

   如果默认,在输入的过程(即伴随着键盘的按下弹起)中,就会触发验证,反之,置为false,在输入的过程(即伴随着键盘的按下弹起)中不触发验证。

   4.设置点击checkbox和radio不触发验证,同上。

onclick : false, //默认为true

   5.设置错误提示后,无法获取焦点。

focusInvalid : false, //默认为true

   如果默认,初次点击submit按钮,会触发xxx不为空等验证,随即焦点落在第一个输入框中,然后以此类推。若置为false,错误提示后,无法获取焦点。

   6.提示错误时,隐藏错误提示,不能和focusInvalid一起用,冲突。这个问题一大堆,就一废物属性,估计这辈子都不会用到它。

focusCleanup : true, //默认为false

   7.如果表单元素设置了title值,且messages为默认,就会读取title值的错误信息,我们可以通过ignoreTitle : true,设置为true,屏蔽这一个功能。

ignoreTitle : true, //默认为false

   index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>知问前端</title>
    <script type="text/javascript" src="jquery-1.12.3.js"></script>
    <script type="text/javascript" src="jquery-ui.js"></script>
    <script type="text/javascript" src="jquery.validate.js"></script>
    <script type="text/javascript" src="index.js"></script>
    <link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico" />
    <link rel="stylesheet" type="text/css" href="jquery-ui.css" />
    <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
    <form id="reg" action="123.html">
        <p>账号:<input type="text" name="user" id="user" title="账号错误" /></p>
        <p>密码:<input type="text" name="pass" id="pass" /></p>
        <p><input type="submit" value="提交" /></p>
    </form>
</body>
</html>
View Code

   index.js:

$(function() {

    $("#reg").validate({
        submitHandler:function(form) {
            alert("验证成功,准备提交!");
        },
        
        rules:{
            user:{
                required:true,
                minlength:2,
                //remote:"user.php" //连接远程地址
            },
            pass:{
                required:true,
                minlength:6,
                remote:{
                    url:"user.php",
                    type:"post",
                    dateType:"json",
                    data:{
                        user:function() {
                            return $('#user').val();
                        }
                    }
                }
                
            }
        },
        messages:{
            user:{
                //required:"账号不得为空!",
                //minlength:"账号不得小于{0}位!",
                //remote:"账号被占用!"
            },
            pass:{
                required:"密码不得为空!",
                minlength:"密码不得小于{0}位!",
                remote:"账号或密码不正确!"
            }
        }
    });

});
View Code

   此时,点击提交按钮,会显示“账号错误”信息。那么可以通过ignoreTitle : true,设置为true,屏蔽这一个功能:

$(function() {

    $("#reg").validate({

        //onsubmit:false,

        //onfocusout:false,

        //onkeyup:false,

        //focusInvalid:false,

        //focusCleanup:true,

        //禁止读取title
        ignoreTitle : true,

        submitHandler:function(form) {
            alert("验证成功,准备提交!");
        },
        
        rules:{
            user:{
                required:true,
                minlength:2,
                //remote:"user.php" //连接远程地址
            },
            pass:{
                required:true,
                minlength:6,
                remote:{
                    url:"user.php",
                    type:"post",
                    dateType:"json",
                    data:{
                        user:function() {
                            return $('#user').val();
                        }
                    }
                }
                
            }
        },
        messages:{
            user:{
                //required:"账号不得为空!",
                //minlength:"账号不得小于{0}位!",
                //remote:"账号被占用!"
            },
            pass:{
                required:"密码不得为空!",
                minlength:"密码不得小于{0}位!",
                remote:"账号或密码不正确!"
            }
        }
        
    });

});

   此时,点击提交按钮,会显示“这是必填字段”信息。

   8.判断表单所验证的元素是否全部有效

//外部验证,得到true/false的返回值
alert($("#reg").valid()); //全部有效返回true

   validate.js提供了可以单独验证每个表单元素的rules方法,不但提供了add增加验证,还提供了remove删除验证的功能。

   给user增加一个表单验证:

$("#user").rules("add", {
    required:true,
    minlength:2,
    messages:{
        required:"账号不得为空!",
        minlength:"账号不得小于{0}位!"
    }
});

   删除user的所有验证规则:

$("#user").rules("remove");

   删除user的指定验证规则:

$('#user').rules('remove', 'minlength min max');

   添加自定义验证并调用:

   index.html中加入

<p>邮编:<input type="text" name="code" id="code" /></p>

   jQuery代码如下:

//调用自定义验证
$("#code").rules("add", {
    required:true,
    code:true,
    messages:{
        required:"邮编不得为空!"
    }
});
//自定义验证
$.validator.addMethod("code", function(value, element) {
    var tel = /^[0-9]{6}$/;
    return this.optional(element) || (tel.test(value)); //固定套路
}, "请输入正确的邮政编码!");

 

  

posted @ 2016-05-05 16:46  叶十一少  阅读(326)  评论(0编辑  收藏  举报