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

   validate()的方法和选项

   除了默认的验证规则外,jquery.validate.js还提供了大量的其他属性和方法供开发者使用,比如调试属性,错误提示位置一系列比较有用的选项。

   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 class="myerror"></p>
        <p>账号:<input type="text" name="user" /></p>
        <p>密码:<input type="text" name="pass" id="pass" /></p>
        <p><input type="submit" value="提交" /></p>
    </form>
</body>
</html>

   jQuery代码:

$(function() {
    $("#reg").validate({
        rules:{
            user:{
                required:true,
                minlength:2,
                //rangelength:[5,10]
            },
            pass:{
                required:true,
                minlength:6
            }
        },
        messages:{
            user:{
                required:"账号不得为空!",
                minlength:"账号不得小于{0}位!",
                //minlength:jQuery.format("账号不得小于{0}位!")  //加了之后反而丧失作用
                //minlength:$.format("账号不得小于{0}位!") //同上
                //rangelength:"帐号限制在{0}-{1}位!"
            },
            pass:{
                required:"密码不得为空!",
                minlength:"密码不得小于{0}位!"
            }
        }
    });
});

   开启调试模式禁止提交:

$('#reg').validate({
    debug : true
});

   设置调试模式为默认,可以禁止多个表单提交:

//设置调试模式为默认,可以禁止多个表单提交,
//所有默认行为都可以在这里设置
$.validator.setDefaults({
    debug:true
});

   使用其他方式代替默认提交:

$(function() {
    $("#reg").validate({
     //使用其他方式代替默认提交
        submitHandler:function(form) {
            //可以执行ajax提交,并且无须debug:true阻止提交了
            //alert(form); // [object HTMLFormElement]
            
            //当验证成功后执行,而且阻止了默认提交
            //一般用于ajax提交使用
            
            //$(".myerror").hide();

            alert("验证成功,准备提交!");
        }
    });
});

   忽略某个字段验证:

$('#reg').validate({
    ignore:"#pass"
});

   群组错误提示:

$('#reg').validate({
    groups:{
      myerror:"user pass"
    }
});

   显示群组的错误提示:

$('#reg').validate({
    focusInvalid:false, //使得第一次表单提交之后,焦点不在第一个input控件上
    //error是user、pass两个错误对象,element是<input>控件的DOM对象
    errorPlacement:function(error,element) {
    //alert(element[0]); //[object HTMLInputElement]
    //alert(error); //[object Object]
      $.each(error, function(index,value) {
          //alert(index + " " + value); //0 [object HTMLLabelElement]
          //alert(index + " " + $(value).html());
          $(".myerror").html($(".myerror").html() + $(value).html());
      });
    }
});

   群组错误提示,分开:

$('#reg').validate({
    groups:{
      error_user:"user",
      error_pass:"pass"
    }
});

   将群组的错误指定存放位置:

$('#reg').validate({
    errorPlacement:function(error,element) {
      error.appendTo(".myerror");
    }
});

   设置错误提示的class名以及设置错误提示的标签:

$('#reg').validate({
    errorPlacement:function(error,element) {
      error.appendTo(".myerror");
    },
    //设置错误提示的class名
    errorClass:"abc", //默认为error
    //设置错误提示的标签
    errorElement:"p", //默认是<label>标签包裹
});

   将index.html的<p class="myerror"></p>修改为:<ol class="myerror"></ol>

$('#reg').validate({
    errorPlacement:function(error,element) {
      error.appendTo(".myerror");
    },
    //统一包裹错误提示
    errorLabelContainer:"ol.myerror",
    wrapper:"li"
});

   设置成功后加载的class以及使用方法加载class并添加文本:

   style.css:

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

   jQuery代码如下:

$('#reg').validate({
    //加载成功后,<input>控件后的<label>控件加载class
    success:"abc", //成功后加载(即输入正确后),<input>控件的class默认为valid
    //使用方法加载class并添加文本
    success:function(label) {
    label.addClass("abc").text("ok");
    }
});

   高亮显示有错误的元素,变色式:

$('#reg').validate({
    //高亮显示有错误的元素,变色式
    highlight:function(element, errorClass) {
      $(element).css("border","1px solid red");
    },
    //恢复默认
    unhighlight:function(element, errorClass) {
      $(element).css("border","1px solid #ccc");
    }
});

   表单提交时获取信息:

$("#reg").validate({
    //使用其他方式代替默认提交
    submitHandler:function(form) {
        //可以执行ajax提交,并且无须debug:true阻止提交了
        //alert(form); // [object HTMLFormElement]
        
        //验证成功后执行,而且阻止了默认提交
        //一般用于ajax提交使用

        $(".myerror").hide();

        alert("验证成功,准备提交!");
    },
    //有错误的时候才执行,一旦没有错误就不会执行了
    invalidHandler:function(event, validator) {
        //alert(validator.numberOfInvalids()); //2条错误信息
        
        var error = validator.numberOfInvalids();
        if(error) {
            $(".myerror").html("您有"+error+"条错误信息!");
        }
        //if(error == 0) $(".myerror").hide(); //错误,不能这样来判断    
    }
});

   获取错误提示句柄,不用提交及时获取值,达到的效果同上:

$("#reg").validate({
    //使用其他方式代替默认提交
    submitHandler:function(form) {
        //可以执行ajax提交,并且无须debug:true阻止提交了
        //alert(form); // [object HTMLFormElement]
        
        //当验证成功后执行,而且阻止了默认提交
        //一般用于ajax提交使用
        alert("验证成功,准备提交!");
    },
    showErrors:function(errorMap, errorList) {
        //alert("123");
        //alert(errorMap); //[object Object]
        //$.each(errorMap, function(index, value) {
            //alert(index + " " + value); //user 账号不得为空!
        //});
        //alert(errorMap.user);
        //alert(errorList[0].element); //[object HTMLInputElement],当前错误的表单元素
        //alert(errorList[0].message); //当前错误的表单元素
        var error = this.numberOfInvalids();
        //alert(error);
        if(error) {
            $(".myerror").html("您有"+error+"条错误信息!");
        } else {
            $(".myerror").hide();
        }
        this.defaultShowErrors(); //执行默认错误
    },
});

  

  

posted @ 2016-05-03 17:09  叶十一少  阅读(258)  评论(0编辑  收藏  举报