validate+jquery+ajax表单验证

╰+哭是因爲堅強的太久メ 2021-09-14 04:32 521阅读 0赞

1.案例

1.1 Html form表单内容

复制代码

  1. <form class="cForm" id="cForm" method="post" action="">
  2. <p>
  3. <label for="user">用户名</label>
  4. <input id="user" name="user" required minlength="3">
  5. </p>
  6. <p>
  7. <label for="password">密码</label>
  8. <input id="password" type="password" maxlength="12" name="password">
  9. </p>
  10. <p>
  11. <input class="submit" type="submit" value="登录">
  12. </p>
  13. </form>

复制代码

1.2 js代码(进行表单自验证)

复制代码

  1. <script>
  2. $().ready(function() {
  3.   $("#cForm").validate({
  4.   onsubmit:true,// 是否在提交是验证
  5.   onfocusout:false,// 是否在获取焦点时验证
  6.   onkeyup :false,// 是否在敲击键盘时验证
  7. rules: {    //规则
  8.   user: {  //要对应相对应的input中的name属性
  9.     required: true
  10.   },
  11.   password: {
  12.     required: true
  13.   }
  14. },
  15. messages:{    //验证错误信息
  16.   user: {
  17.     required: "请输入用户名"
  18.     },
  19.   password: {
  20.     required: "请输入密码"
  21.   }
  22. },
  23. submitHandler: function(form) { //通过之后回调
  24. //进行ajax传值
  25. $.ajax({
  26.   url : "{:U('user/index')}",
  27.   type : "post",
  28.   dataType : "json",
  29.   data: {
  30.     user: $("#user").val(),
  31.     password: $("#password").val()
  32.   },
  33.   success : function(msg) {
  34.     //要执行的代码
  35.   }
  36. });
  37. },
  38. invalidHandler: function(form, validator) {
  39. return false;}
  40. });
  41. });
  42. </script>

复制代码

1.3在控制器中对ajax传递的数据进行处理

  1. ajax传到控制器中的数据进行处理,返回结果。

1.4效果展示

  1091655-20170205184215917-2099315067.png

2.validate的一些验证参数

2.1使用表单自验证可以通过导入js库

  1. <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script>
  2. <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script>

可在官网进行下载

默认的校验规则






























































































序号 规则 描述
1 required:true 必须输入的字段。
2 remote:”check.php” 使用 ajax 方法调用 check.php 验证输入值。
3 email:true 必须输入正确格式的电子邮件。
4 url:true 必须输入正确格式的网址。
5 date:true 必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6 dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7 number:true 必须输入合法的数字(负数,小数)。
8 digits:true 必须输入整数。
9 creditcard: 必须输入合法的信用卡号。
10 equalTo:”#field” 输入值必须和 #field 相同。
11 accept: 输入拥有合法后缀名的字符串(上传文件的后缀)。
12 maxlength:5 输入长度最多是 5 的字符串(汉字算一个字符)。
13 minlength:10 输入长度最小是 10 的字符串(汉字算一个字符)。
14 rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15 range:[5,10] 输入值必须介于 5 和 10 之间。
16 max:5 输入值不能大于 5。
17 min:10 输入值不能小于 10。

2.2将校验规则写到 js 代码中

就像我上面写的例子,直接把验证规则和提示信息写在js代码中

复制代码

  1. $().ready(function() {
  2. // 在键盘按下并释放及提交后验证提交表单
  3. $("#signupForm").validate({
  4. rules: {
  5. firstname: "required",
  6. lastname: "required",
  7. username: {
  8. required: true,
  9. minlength: 2
  10. },
  11. password: {
  12. required: true,
  13. minlength: 5
  14. },
  15. confirm_password: {
  16. required: true,
  17. minlength: 5,
  18. equalTo: "#password"
  19. },
  20. email: {
  21. required: true,
  22. email: true
  23. },
  24. topic: {
  25. required: "#newsletter:checked",
  26. minlength: 2
  27. },
  28. agree: "required"
  29. },
  30. messages: {
  31. firstname: "请输入您的名字",
  32. lastname: "请输入您的姓氏",
  33. username: {
  34. required: "请输入用户名",
  35. minlength: "用户名必需由两个字母组成"
  36. },
  37. password: {
  38. required: "请输入密码",
  39. minlength: "密码长度不能小于 5 个字母"
  40. },
  41. confirm_password: {
  42. required: "请输入密码",
  43. minlength: "密码长度不能小于 5 个字母",
  44. equalTo: "两次密码输入不一致"
  45. },
  46. email: "请输入一个正确的邮箱",
  47. agree: "请接受我们的声明",
  48. topic: "请选择两个主题"
  49. }
  50. });

复制代码

•校验规则中的名字必须与input中的name值对应

2.3常用方法及注意问题

2.3.1我们可以用其他方式替代默认的 submit

复制代码

  1. $().ready(function() {
  2. $("#signupForm").validate({
  3. submitHandler:function(form){ //表单提交后要执行的内容
  4. form.submit();
  5. }
  6. });
  7. });

复制代码

  使用ajax //跟我上面的ajax传值差不多

  1. $(".selector").validate({
  2. submitHandler: function(form)
  3. {
  4. $(form).ajaxSubmit();
  5. }
  6. })

2.3.2debug,只验证不提交表单

  1. $().ready(function() {
  2. $("#signupForm").validate({
  3. debug:true
  4. });
  5. });

如果一个页面中有多个表单都想设置成为 debug,则使用:

  1. $.validator.setDefaults({
  2. debug: true
  3. })

2.3.3ignore:忽略某些元素不验证

  1. ignore: ".ignore"

2.3.4更改错误信息显示的位置

  1. errorPlacementCallback

指明错误放置的位置,默认情况是:error.appendTo(element.parent());即把错误信息放在验证的元素后面。

  1. errorPlacement: function(error, element) {
  2. error.appendTo(element.parent());
  3. }

2.3.5更改错误信息显示的样式

设置错误提示的样式,可以增加图标显示,在该系统中已经建立了一个 validation.css,专门用于维护校验文件的样式。

复制代码

  1. input.error { border: 1px solid red; }
  2. label.error {
  3. background:url("./demo/images/unchecked.gif") no-repeat 0px 0px;
  4. padding-left: 16px;
  5. padding-bottom: 2px;
  6. font-weight: bold;
  7. color: #EA5200;
  8. }
  9. label.checked {
  10. background:url("./demo/images/checked.gif") no-repeat 0px 0px;
  11. }

复制代码

2.3.6每个字段验证通过执行函数

  1. success: function(label) {
  2. // set as text for IE
  3. label.html(" ").addClass("checked");
  4. //label.addClass("valid").text("Ok!")
  5. }

2.3.7验证的触发方式修改














































触发方式 类型 描述 默认值
onsubmit Boolean 提交时验证。设置为 false 就用其他方法去验证。 true
onfocusout Boolean 失去焦点时验证(不包括复选框/单选按钮)。 true
onkeyup Boolean 在 keyup 时验证。 true
onclick Boolean 在点击复选框和单选按钮时验证。 true
focusInvalid Boolean 提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)会获得焦点。 true
focusCleanup Boolean 如果是 true 那么当未通过验证的元素获得焦点时,移除错误提示。避免和 focusInvalid 一起用。 false
  1. •重置表单 很实用

复制代码

  1. $().ready(function() {
  2. var validator = $("#signupForm").validate({
  3. submitHandler:function(form){
  4. alert("submitted");
  5. form.submit();
  6. }
  7. });
  8. $("#reset").click(function() {
  9. validator.resetForm();
  10. });
  11. });

复制代码

2.3.8异步验证

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

复制代码

  1. remote: {
  2. url: "check-email.php", //后台处理程序
  3. type: "post", //数据发送方式
  4. dataType: "json", //接受数据格式
  5. data: { //要传递的数据
  6. username: function() {
  7. return $("#username").val();
  8. }
  9. }
  10. }

复制代码

2.3.9添加自定义校验

  1. addMethodname, method, message

自定义验证方法

复制代码

  1. // 中文字两个字节
  2. jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
  3. var length = value.length;
  4. for(var i = 0; i < value.length; i++){
  5. if(value.charCodeAt(i) > 127){
  6. length++;
  7. }
  8. }
  9. return this.optional(element) || ( length >= param[0] && length <= param[1] );
  10. }, $.validator.format("请确保输入的值在{0}-{1}个字节之间(一个中文字算2个字节)"));
  11. // 邮政编码验证
  12. jQuery.validator.addMethod("isZipCode", function(value, element) {
  13. var tel = /^[0-9]{6}$/;
  14. return this.optional(element) || (tel.test(value));
  15. }, "请正确填写您的邮政编码");

复制代码

2.3.10radio 和 checkbox、select 的验证

列举一个demo统一验证一下

复制代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>jQuery Validate radio(单选按钮)、checkbox(复选按钮)和 select(下拉框)</title>
  6. <link rel="stylesheet" media="screen" href="http://static.runoob.com/assets/jquery-validation-1.14.0/demo/css/screen.css">
  7. <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script>
  8. <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script>
  9. <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/localization/messages_zh.js"></script>
  10. <style>
  11. .block {
  12. display: block; }
  13. form.cmxform label.error {
  14. display: none; }
  15. </style>
  16. </head>
  17. <body>
  18. <div id="main">
  19. <form class="cmxform" id="form1" method="get" action="">
  20. <fieldset>
  21. <legend>通过 radio(单选按钮)和 checkbox(复选按钮)验证表单</legend>
  22. <fieldset>
  23. <legend>性别</legend>
  24. <label for="gender_male">
  25. <input type="radio" id="gender_male" value="m" name="gender" required>
  26. 男性
  27. </label>
  28. <label for="gender_female">
  29. <input type="radio" id="gender_female" value="f" name="gender">
  30. 女性
  31. </label>
  32. <label for="gender" class="error">请选择您的性别。</label>
  33. </fieldset>
  34. <fieldset>
  35. <legend>婚姻状况</legend>
  36. <label for="family_single">
  37. <input type="radio" id="family_single" value="s" name="family" required>
  38. 单身
  39. </label>
  40. <label for="family_married">
  41. <input type="radio" id="family_married" value="m" name="family">
  42. 已婚
  43. </label>
  44. <label for="family_other">
  45. <input type="radio" id="family_other" value="o" name="family">
  46. 其他
  47. </label>
  48. <label for="family" class="error">您选择您的婚姻状况。</label>
  49. </fieldset>
  50. <p>
  51. <label for="agree">请同意我们的条款</label>
  52. <input type="checkbox" class="checkbox" id="agree" name="agree" required>
  53. <br>
  54. <label for="agree" class="error block">请同意我们的条款!</label>
  55. </p>
  56. <fieldset>
  57. <legend>垃圾邮件</legend>
  58. <label for="spam_email">
  59. <input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" required minlength="2">
  60. 垃圾邮件 - E-Mail
  61. </label>
  62. <label for="spam_phone">
  63. <input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]">
  64. 垃圾邮件 - Phone
  65. </label>
  66. <label for="spam_mail">
  67. <input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]">
  68. 垃圾邮件 - Mail
  69. </label>
  70. <label for="spam[]" class="error">请选择至少两种类型的垃圾邮件。</label>
  71. </fieldset>
  72. <p>
  73. <input class="submit" type="submit" value="提交">
  74. </p>
  75. </fieldset>
  76. </form>
  77. <form id="selecttest">
  78. <h2>一些关于 select 的测试</h2>
  79. <p>
  80. <label for="jungle">请选择一个丛林名词</label><br>
  81. <select id="jungle" name="jungle" title="请选择一个丛林名词!" required>
  82. <option value=""></option>
  83. <option value="1">Buga</option>
  84. <option value="2">Baga</option>
  85. <option value="3">Oi</option>
  86. </select>
  87. </p>
  88. <p>
  89. <label for="fruit">请选择至少两种水果</label><br>
  90. <select id="fruit" name="fruit" title="请选择至少两种水果!" required minlength="2" multiple="multiple">
  91. <option value="b">Banana</option>
  92. <option value="a">Apple</option>
  93. <option value="p">Peach</option>
  94. <option value="t">Turtle</option>
  95. </select>
  96. </p>
  97. <p>
  98. <label for="vegetables">请选择不超过两种蔬菜</label><br>
  99. <select id="vegetables" name="vegetables" title="请选择不超过两种蔬菜!" required maxlength="2" multiple="multiple">
  100. <option value="p">Potato</option>
  101. <option value="t">Tomato</option>
  102. <option value="s">Salad</option>
  103. </select>
  104. </p>
  105. <p>
  106. <label for="cars">请选择至少两种但不超过三种汽车</label><br>
  107. <select id="cars" name="cars" title="请选择至少两种但不超过三种汽车!" required rangelength="[2,3]" multiple="multiple">
  108. <option value="m_sl">Mercedes SL</option>
  109. <option value="o_c">Opel Corsa</option>
  110. <option value="vw_p">VW Polo</option>
  111. <option value="t_s">Titanic Skoda</option>
  112. </select>
  113. </p>
  114. <p><input type="submit" value="Validate Select 测试"></p>
  115. </form>
  116. </div>
  117. </body>
  118. </html>

复制代码

js代码

复制代码

  1. <script>
  2. $.validator.setDefaults({
  3. submitHandler: function() {
  4. alert("submitted!");
  5. }
  6. });
  7. $(document).ready(function() {
  8. $("#form1").validate();
  9. $("#selecttest").validate();
  10. });
  11. </script>

复制代码

大家有什么意见或者建议可以留言指导、批评

发表评论

表情:
评论列表 (有 0 条评论,521人围观)

还没有评论,来说两句吧...

相关阅读

    相关 验证

    angularjs 表单验证,包含必填、手机、邮箱、ip、网址等 基于angularjs自己封装的验证插件,之前的插件在angularjs上就不能使用了,然后将之前的封

    相关 验证

    表单验证为了减轻服务器的压力,请求次数减少,保证用户输入符合要求。 > 常用的表单验证 > \- 日期样式 > \- 表单内容是否为空 > \- 用户名和密码

    相关 验证

    java script验证表单时常用:   "^-\[0-9\]\\[1-9\]\[0-9\]\$"  //负整数    "^-?//d+$"    //整