表单校验插件Jquery.validate.js

导入插件的步骤:

  1. 将jquery的原始文件和插件文件jquery.validate.js导入到工程中
  2. 编写js代码对表单进行验证
  3. 表单验证的格式:
$("form表单的选择器").validate(json数据格式);  //键值对 
  键:值({})
json数据格式:
{
      "rules":{
            表单项name值:校验规则,
            表单项name值:校验规则...  ...
      },
      "messages":{
            表单项name值:错误提示信息,
            表单项name值:错误提示信息...  ...
      }
}

其中:校验规则,可以是一个也可以是多个,如果是多个使用json格式

常用校验规则如下:


image

注意:

当错误提示信息不按照我们预想的位置显示时,我们可以按照如下方式进行设置自定义错误显示标签放在我们需要显示的位置,当此表单项验证不通过时会将此信息自动显示出来,jquery验证插件会自动帮助我们控制它的显示与隐藏
for="html元素name值" class="error"
style="display:none">错误信息
如果设置了错误lable标签就不必在messages中设置此表单项错误提示信息了
如果预定义的校验规则尚不能满足需求的话可以进行自定义校验规则:

自定义校验规则步骤如下:

(1) 使用$.validator.addMethod("校验规则名称",function(value,element,params)){ return false;//表示校验不通过,会显示错误提示信息}
(2) 在rules中通过校验规则名称使用校验规则
(3) 在messages中定义该规则对应的错误提示信息
其中: value是校验组件的value值
element是校验组件的节点对象
params是校验规则的参数

//自定义校验规则

$.validator.addMethod("checkUsername", function(value, elem, params) {
  var flag = false;
  $.ajax({
    "url" : "${pageContext.request.contextPath}/checkUsername",
    "data" : {
      "username" : value
    },
    "dataType" : "json",
    "success" : function(data) {
      flag = data.isExist;
    },
    "async" : false//必须用同步,否则flag在被赋值之前就已经return
  });
  return !flag;//返回false表示校验不通过
});

但是使用同步请求浏览器发出警告[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

解决方法:使用插件的异步验证

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

    $(function() {
        $("#myform")
                .validate(
                        {
                            "rules" : {
                                "username" : {
                                    "required" : true,
                                    //"checkUsername" : true
                                    "remote" : {
                                        "type" : "post",
                                        "url" : "${pageContext.request.contextPath}/checkUsername",
                                        "data" : {
                                            "username" : function() {
                                                return $("#username").val();
                                            }
                                        },
                                        //"dataType" : "html",
                                        "dataType" : "json",
                                        "dataFilter" : function(data, type) {
                                            if (type == "json") {
                                                data = JSON.parse(data);
                                                return !data.isExist;
                                            } else {
                                                return data == "true" ? false
                                                        : true;
                                            }
                                        }
                                    }
                                },
                                "password" : {
                                    "required" : true,
                                    "rangelength" : [ 6, 12 ]
                                },
                                "repassword" : {
                                    "required" : true,
                                    "rangelength" : [ 6, 12 ],
                                    "equalTo" : "#password"
                                },
                                "email" : {
                                    "required" : true,
                                    "email" : true
                                },
                                "telephone" : {
                                    "required" : true
                                },
                                "birthday" : {
                                    "required" : true,
                                    "dateISO" : true
                                }
                            },
                            "messages" : {
                                "username" : {
                                    "required" : "用户名不能为空",
                                    //"checkUsername" : "用户名已存在"
                                    "remote" : "用户名已经被注册啦"
                                },
                                "password" : {
                                    "required" : "密码不能为空",
                                    "rangelength" : "密码长度必须介于6到12位"
                                },
                                "repassword" : {
                                    "required" : "密码不能为空",
                                    "rangelength" : "密码长度必须介于6到12位",
                                    "equalTo" : "两次密码输入不一致"
                                },
                                "email" : {
                                    "required" : "邮箱不能为空",
                                    "email" : "邮箱格式不正确"
                                },
                                "telephone" : {
                                    "required" : "电话号码不能为空"
                                },
                                "birthday" : {
                                    "required" : "日期不能为空",
                                    "dateISO" : "日期格式不正确"
                                }
                            }
                        });
    });
  • 自定义校验、设置触发方式、ajax刷新验证码图片
<script type="text/javascript">
    //自定义校验规则
    /* $.validator.addMethod("checkUsername", function(value, elem, params) {
        var flag = false;
        $.ajax({
            "url" : "${pageContext.request.contextPath}/checkUsername",
            "data" : {
                "username" : value
            },
            "dataType" : "json",
            "success" : function(data) {
                flag = data.isExist;
            },
            "async" : false
        //必须用同步,否则flag在被赋值之前就已经return
        });
        return !flag;
    }); */

    $(function() {
        $("#randomcode").click(
                function() {
                    $(this).attr(
                            "src",
                            $(this).attr("src")
                                    .substring(
                                            0,
                                            $(this).attr("src").indexOf(
                                                    "randomcode") + 10)
                                    + "&" + new Date().getTime())
                });

        $("#myform")
                .validate(
                        {   //"debug" : true,
                            "onkeyup":function(){
                                //alert("什么也不做~~");
                            },
                            "rules" : {
                                "username" : {
                                    "required" : true,
                                    //"checkUsername" : true
                                    "remote" : {
                                        "type" : "post",
                                        "url" : "${pageContext.request.contextPath}/user?method=checkUsername",
                                        "data" : {
                                            "username" : function() {
                                                return $("#username").val();
                                            }
                                        },
                                        "dataType" : "json",
                                        "dataFilter" : function(data, type) {
                                            //alert(type);//json
                                            if (type == "json") {
                                                data = JSON.parse(data);
                                                return !data.isExist;
                                            } else {
                                                return data == "true" ? false
                                                        : true;
                                            }
                                        }
                                    }
                                },
                                "password" : {
                                    "required" : true,
                                    "rangelength" : [ 6, 12 ]
                                },
                                "repassword" : {
                                    "required" : true,
                                    "rangelength" : [ 6, 12 ],
                                    "equalTo" : "#password"
                                },
                                "email" : {
                                    "required" : true,
                                    "email" : true
                                },
                                "telephone" : {
                                    "required" : true
                                },
                                "birthday" : {
                                    "required" : true,
                                    "dateISO" : true
                                },
                                "randomcode" : {
                                    "required" : true,
                                    "remote" : {
                                        "type" : "post",
                                        "url" : "${pageContext.request.contextPath}/user?method=checkRandomcode",
                                        "data" : {
                                            "username" : function() {
                                                return $("#randomcode").val();
                                            }
                                        },
                                        "dataType" : "html",
                                        "dataFilter" : function(data, type) {
                                            //alert(type);//json
                                            if (type == "json") {
                                                data = JSON.parse(data);
                                                return !data.isExist;
                                            } else {
                                                if(data=="false"){
                                                    /* alert("失败>刷新") */
                                                    $("#randomcode").attr(
                                                            "src",
                                                            $("#randomcode").attr("src")
                                                                    .substring(
                                                                            0,
                                                                            $("#randomcode").attr("src").indexOf(
                                                                                    "randomcode") + 10)
                                                                    + "&" + new Date().getTime());

                                                }
                                                return data == "true" ? true
                                                        : false;
                                            }
                                        }
                                    }
                                }
                            },
                            "messages" : {
                                "username" : {
                                    "required" : "用户名不能为空",
                                    //"checkUsername" : "用户名已存在"
                                    "remote" : "用户名已经被注册啦"
                                },
                                "password" : {
                                    "required" : "密码不能为空",
                                    "rangelength" : "密码长度必须介于6到12位"
                                },
                                "repassword" : {
                                    "required" : "密码不能为空",
                                    "rangelength" : "密码长度必须介于6到12位",
                                    "equalTo" : "两次密码输入不一致"
                                },
                                "email" : {
                                    "required" : "邮箱不能为空",
                                    "email" : "邮箱格式不正确"
                                },
                                "telephone" : {
                                    "required" : "电话号码不能为空"
                                },
                                "birthday" : {
                                    "required" : "日期不能为空",
                                    "dateISO" : "日期格式不正确"
                                },
                                "randomcode" : {
                                    "required" : "验证码不能为空",
                                    "remote" : "验证码错误"
                                }
                            }
                        });
    });
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 两个概念:method:验证方法,指的是校验的逻辑rule :验证规则,指的是元素和验证方法的关联validate...
    200813阅读 2,971评论 0 1
  • 你有没有遇到过这么一种姑娘,她看起来温和大方气质出众谈吐得体,越接触越发现对方实则装腔作势背后各种小动作。但好笑的...
    月半徐阅读 227评论 0 0
  • 2017 年9月30日 林婉琳 【招聘背景】 本人林婉琳,硕士研究生毕业于中山大学法学院。目前在英国伦敦国王学院政...
    林小浩er阅读 929评论 1 0
  • 文/讳莫如深 就算已经长大的我,常常还是会心疼那个成长过程中,一次次茫然无助的自己。然而,无法逃离是命运,坦然前行...
    深蓝色的鲸鱼阅读 440评论 0 0