jQuery Validation 学习总结

jQuery Validation学习总结

在应用jQuery Validate前,最好是要引入jquery.metadata.js,它是一个支持固定格式解析的jQuery插件,Validation插件将其很好的融合到验证规则编码中。

实现Validation需要引用的插件有:

<script src="../jQuery/jquery-3.5.1.js" type="text/javascript"></script>
<script src="../jQuery/jquery.validate.js" type="text/javascript"></script>		//验证
<script src="../jQuery/messages_zh.js" type="text/javascript"></script>			//汉化
<script src="../jQuery/jquery.metadata.js" type="text/javascript"></script>		//固定格式

将相关的验证信息写入到class中:
注意1:input 最好要设置 id 和 name 属性;
注意2:load方法中写入 $("#comment").validate({ meta: “validate” });
注意3:class中messages属性不设置的话将弹出默认的信息提示
注意4:校验规则和例子如下:

属性 解释
required:true 必输字段
remote:“remote-valid.jsp” 使用ajax方法调用remote-valid.jsp验证输入值
email:true 必须输入正确格式的电子邮件
url:true 必须输入正确格式的网址
date:true 必须输入正确格式的日期,日期校验ie6出错,慎用
dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性
creditcard:true 必须输入合法的信用卡号
equalTo:"#password" 输入值必须和#password相同
accept: 输入拥有合法后缀名的字符串(上传文件的后缀)
maxlength:5 输入长度最多是5的字符串(汉字算一个字符)
minlength:10 输入长度最小是10的字符串(汉字算一个字符)
rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)
range:[5,10] 输入值必须介于 5 和 10 之间
max:5 输入值不能大于5
min:10 输入值不能小于10

方法1:校验属性写到html的class中,验证行为与html结构并没有完全脱钩

<form id="comment" class="comment" method="GET" action="#">
    <div>
        <label for="userName">姓名</label>
        <input type="text" id="userName" name="name"
            class="{validate:{required:true,minlength:2,messages:{required:'必须填入',minlength:'输入长度不小于2'}}}">
    </div>
    <div>
        <label for="userAge">年龄</label>
        <input type="text" id="userAge" name="age"
            class="{validate:{required:true,digits:true,messages:{digits:'必须输入整数'}}}">
    </div>
    <div>
        <label for="confirm">确定</label>
        <input type="text" id="confirm" name="confirm"
            class="{validate:{required:true,equalTo:'#userAge',messages:{equalTo:'确定年龄不相符'}}}">
    </div>
    <div>
        <label for="userEmail">邮件</label>
        <input type="text" id="userEmail" name="email" class="{validate:{email:true}}">
    </div>
    <div>
        <input class="submit" type="submit" value="提交" />
    </div>
</form>

<script type="text/javascript">
   $(function () {
    
    
        $("#comment").validate({
    
     meta: "validate" });
    })   
</script>

美化验证信息
默认情况下的错误信息提示为label,错误信息提示样式可以如下填写CSS即可:

label.error {
    
    
            width: fit-content;
            color: rebeccapurple;
            font-style: italic;
            font-size: smaller;
        }

若要进一步美化验证交互,可以在validate中进一步如下编写:

<script type="text/javascript">
    $(function () {
    
    
        $("#comment").validate({
    
    
            meta: "validate",
            errorElement: "label",
            success: function (label) {
    
    
                $("<em style='color:green'> √ </em>").prependTo(label);
            }
        })
    })
</script>

方法2:校验与HTML元素属性无直接关联,是用过name属性来关联字段和验证写法

<body>
    <h2>This is a Create Page</h2>
    <h4 id="content">UserInfo</h4>
    <br />

    <form class="form-horizontal" id="form-create" action="/UserInfo/CreateSubmit" method="post">
        <div class="form-group col-md-10">
            <label>UserName</label>
            <input id="name" name="Name" type="text" placeholder="请输入用户名" class="form-control">
        </div>

        <div class="form-group col-md-10">
            <label>Password</label>
            <input id="password" name="Password" type="text" placeholder="请输入用户密码" class="form-control" />
        </div>

        <div class="form-group col-md-10">
            <input id="submit" type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>

    <div>
        <a href="/UserInfo/Index">Back to List</a>
    </div>

    <script type="text/javascript">
        $(function () {
     
     
            $("#form-create").validate({
     
     
                meta: "validate",
                rules: {
     
     
                    Name: {
     
     
                        required: true,
                        minlength: 2,
                    },
                    Password: {
     
     
                        required: true,
                        digits: true
                    }
                },
                messages: {
     
     
                    Name: {
     
     
                        required: "请输入姓名"
                    },
                    Password: {
     
     
                        required: "请输入密码"
                    }
                },
                elementError: "label",
                success: function (label) {
     
     
                    label.text("√").addClass("success");
                }
            });
        });
    </script>
</body>

自定义验证方式
注意1:在load函数中,加入$.validator.addMethod方法,addMethod的三个参数分别是:自定义验证属性名称,自定义验证方法,错误提示;
注意2:自定义验证方法function(value,element,para),value为当前元素值;element为当前元素;para为参数值,参考例子中formula:10,则para=10;
注意3:this.optional(element) 表示判断当前元素值是否为空,若输入为空直接返回true,不需要验证

<div>
	<label for="userCheck">10</label>
	<input type="text" id="userCheck" name="check" class="{validate:{required:true,digits:true,formula:10}}">
</div>
<script type="text/javascript">
    $(function () {
    
    
        $.validator.addMethod("formula", function (value, element, para) {
    
    
            return (this.optional(element) || value == para)
        }, "算错");

        $("#comment").validate({
    
     meta: "validate" });
    })
</script>

Validation + AJAX(例如判断用户名是否存在,若存在前台提示)
在这里插入图片描述

<html>
<head>
    <script type="text/javascript" src="~/Scripts/jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery.validate.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery.metadata.js"></script>
    <script type="text/javascript" src="~/Scripts/messages_zh.js"></script>
</head>
<body>
    <h2>This is a ajax validate test project</h2>
    <h4>UserInfo</h4>
    <hr/>

    <form id="form" class="form-horizontal" method="post" action="/UserInfo/Create">
        <div class="form-group">
            <label class="control-label">UserName<font style="color:red">*</font> </label>
            <input id="name" name="Name" type="text" placeholder="please input user name" class="form-control" />
            <span id="nameError"></span>          
        </div>

        <div class="form-group">
            <label class="control-label">Password<font style="color:red">*</font></label>
            <input id="password" name="Password" type="text" placeholder="please input password" class="form-control" />
            <span id="passwordError"></span>
        </div>

        <div class="form-group">
            <label class="control-label">Authority<font style="color:seagreen">*</font></label>
            <select id="authority" name="Authority" class="form-control">
                <option selected="selected" value="0">Normal User</option>
                <option value="1">Administrator</option>
            </select>
        </div>

        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
            <a class="btn btn-default" href="/UserInfo/Index">Go Back</a>
        </div>
    </form>

    <script type="text/javascript">
        $(function () {
     
     
            $("#form").validate({
     
     
                meta: "validate",
                rules: {
     
     
                    Name: {
     
     
                        required: true,
                        minlength: 2,
                        isExist: true
                    },
                    Password: {
     
     
                        required: true
                    }
                },
                messages: {
     
     
                    Name: {
     
     
                        required: "please input user name"
                    }
                },
                errorElement: "label",
                errorPlacement: function (error, element) {
     
     
                    element.next().append(error);
                }
            });

            $.validator.addMethod("isExist", function (value, element) {
     
     
                var result = false;
                $.ajax({
     
     
                    url: "/UserInfo/IsUserExist",
                    type: "GET",
                    async: false,
                    dataType: "json",
                    data: {
     
      Name: $("#name").val() },
                    success: function (data) {
     
     
                        result = data;
                    }
                });

                return this.optional(element) || result
            },"name has already existed");
        })
    </script>
</body>
</html>

如果在ASP.NET MVC中 报Validate 没有这个方法 validate is not a function,注意删除_layout.cshtml中@Script.Render("~/bundles/jquery"),或者自己去AppStart中修改BundleConfig.cs文件

Happy Ending

猜你喜欢

转载自blog.csdn.net/ryancao530/article/details/110224955