表單校驗插件Jquery.validate.js

導入插件的步驟:

  1. 將jquery的原始文件和插件文件jquery.validate.js導入到工程中
  2. 編寫js代碼對表單進行驗證
  3. 表單驗證的格式:
$("form表單的選擇器").validate(json數(shù)據(jù)格式);  //鍵值對 
  鍵:值({})
json數(shù)據(jù)格式:
{
      "rules":{
            表單項name值:校驗規(guī)則旁赊,
            表單項name值:校驗規(guī)則...  ...
      },
      "messages":{
            表單項name值:錯誤提示信息椅野,
            表單項name值:錯誤提示信息...  ...
      }
}

其中:校驗規(guī)則,可以是一個也可以是多個声离,如果是多個使用json格式

常用校驗規(guī)則如下:


image

注意:

當錯誤提示信息不按照我們預想的位置顯示時瘫怜,我們可以按照如下方式進行設(shè)置自定義錯誤顯示標簽放在我們需要顯示的位置鲸湃,當此表單項驗證不通過時會將此信息自動顯示出來,jquery驗證插件會自動幫助我們控制它的顯示與隱藏
for="html元素name值" class="error"
style="display:none">錯誤信息
如果設(shè)置了錯誤lable標簽就不必在messages中設(shè)置此表單項錯誤提示信息了
如果預定義的校驗規(guī)則尚不能滿足需求的話可以進行自定義校驗規(guī)則:

自定義校驗規(guī)則步驟如下:

(1) 使用$.validator.addMethod("校驗規(guī)則名稱",function(value,element,params)){ return false;//表示校驗不通過笋除,會顯示錯誤提示信息}
(2) 在rules中通過校驗規(guī)則名稱使用校驗規(guī)則
(3) 在messages中定義該規(guī)則對應的錯誤提示信息
其中: value是校驗組件的value值
element是校驗組件的節(jié)點對象
params是校驗規(guī)則的參數(shù)

//自定義校驗規(guī)則

$.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在被賦值之前就已經(jīng)return
  });
  return !flag;//返回false表示校驗不通過
});

但是使用同步請求瀏覽器發(fā)出警告[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" : "用戶名已經(jīng)被注冊啦"
                                },
                                "password" : {
                                    "required" : "密碼不能為空",
                                    "rangelength" : "密碼長度必須介于6到12位"
                                },
                                "repassword" : {
                                    "required" : "密碼不能為空",
                                    "rangelength" : "密碼長度必須介于6到12位",
                                    "equalTo" : "兩次密碼輸入不一致"
                                },
                                "email" : {
                                    "required" : "郵箱不能為空",
                                    "email" : "郵箱格式不正確"
                                },
                                "telephone" : {
                                    "required" : "電話號碼不能為空"
                                },
                                "birthday" : {
                                    "required" : "日期不能為空",
                                    "dateISO" : "日期格式不正確"
                                }
                            }
                        });
    });
  • 自定義校驗崎岂、設(shè)置觸發(fā)方式、ajax刷新驗證碼圖片
<script type="text/javascript">
    //自定義校驗規(guī)則
    /* $.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在被賦值之前就已經(jīng)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" : "用戶名已經(jīng)被注冊啦"
                                },
                                "password" : {
                                    "required" : "密碼不能為空",
                                    "rangelength" : "密碼長度必須介于6到12位"
                                },
                                "repassword" : {
                                    "required" : "密碼不能為空",
                                    "rangelength" : "密碼長度必須介于6到12位",
                                    "equalTo" : "兩次密碼輸入不一致"
                                },
                                "email" : {
                                    "required" : "郵箱不能為空",
                                    "email" : "郵箱格式不正確"
                                },
                                "telephone" : {
                                    "required" : "電話號碼不能為空"
                                },
                                "birthday" : {
                                    "required" : "日期不能為空",
                                    "dateISO" : "日期格式不正確"
                                },
                                "randomcode" : {
                                    "required" : "驗證碼不能為空",
                                    "remote" : "驗證碼錯誤"
                                }
                            }
                        });
    });
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赖晶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捂贿,更是在濱河造成了極大的恐慌胳嘲,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜屠,死亡現(xiàn)場離奇詭異鹰祸,居然都是意外死亡,警方通過查閱死者的電腦和手機粗井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懒构,“玉大人径玖,你說我怎么就攤上這事∈嵝牵” “怎么了冤灾?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匿垄。 經(jīng)常有香客問我归粉,道長,這世上最難降的妖魔是什么糠悼? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任倔喂,我火速辦了婚禮,結(jié)果婚禮上席噩,老公的妹妹穿的比我還像新娘。我一直安慰自己埠忘,他們只是感情好馒索,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布双揪。 她就那樣靜靜地躺著,像睡著了一般渔期。 火紅的嫁衣襯著肌膚如雪渴邦。 梳的紋絲不亂的頭發(fā)上拘哨,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天倦青,我揣著相機與錄音,去河邊找鬼产镐。 笑死,一個胖子當著我的面吹牛丑掺,可吹牛的內(nèi)容都是我干的述雾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼唆缴,長吁一口氣:“原來是場噩夢啊……” “哼黍翎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旺聚,失蹤者是張志新(化名)和其女友劉穎眶蕉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體造挽,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡饭入,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年谐丢,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚓让。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讥珍。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衷佃,靈堂內(nèi)的尸體忽然破棺而出氏义,到底是詐尸還是另有隱情,我是刑警寧澤觅赊,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布吮螺,位于F島的核電站,受9級特大地震影響鸠补,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜规惰,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一泉蝌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贪磺,春花似錦诅愚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至校坑,卻和暖如春衅鹿,著一層夾襖步出監(jiān)牢的瞬間过咬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工遂跟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烫幕,地道東北人敞映。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像捷犹,于是被迫代替她去往敵國和親冕末。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理枪孩,服務發(fā)現(xiàn)藻肄,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 兩個概念:method:驗證方法攻询,指的是校驗的邏輯rule :驗證規(guī)則抚垄,指的是元素和驗證方法的關(guān)聯(lián)validate...
    200813閱讀 2,981評論 0 1
  • 你有沒有遇到過這么一種姑娘,她看起來溫和大方氣質(zhì)出眾談吐得體气堕,越接觸越發(fā)現(xiàn)對方實則裝腔作勢背后各種小動作畔咧。但好笑的...
    月半徐閱讀 228評論 0 0
  • 2017 年9月30日 林婉琳 【招聘背景】 本人林婉琳誓沸,碩士研究生畢業(yè)于中山大學法學院壹粟。目前在英國倫敦國王學院政...
    林小浩er閱讀 931評論 1 0
  • 文/諱莫如深 就算已經(jīng)長大的我,常常還是會心疼那個成長過程中趁仙,一次次茫然無助的自己。然而干奢,無法逃離是命運盏袄,坦然前行...
    深藍色的鯨魚閱讀 441評論 0 0