基于BootStrap与jQuery.validate实现表单提交校验功能


Posted in Javascript onDecember 22, 2016

谈谈表单校验

这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录。现在社会坚持以人为本的理念,在网站开发过程同样如此。User是我们面对较多的对象,也是较核心的对象。最开始的用户注册和登陆这块,也就尤为重要。

直接看demo:http://www.suchso.com/code/bootstrapvalidate/

基于BootStrap与jQuery.validate实现表单提交校验功能

用户注册和登录其实往往比我们想象的难。就比如表单校验,里面涵盖的内容其实挺多,就前台而言,你需要了解:

1.正则表达式的基本了解

其实正则并不难,并且在学会后能带给你极大的成就感,享受那种事半功倍的效果吧。

2.ajax异步请求

在验证用户名是否存在、用户登录时账号或者密码错误时给出相应的提示。

3.一些方便的验证库,比如jQuery.validate

正因为如此普遍的需求和一定的复杂性,bootstrap表单和jQuery.validate表单校验等一些优秀的类库专为人们解决UI、表单校验问题。

下面就是我用bootstrap+jQuery.validate做的界面:

基于BootStrap与jQuery.validate实现表单提交校验功能

bootstrap3基本表单和水平表单

基本表单

基本的表单结构是 Bootstrap 自带的,下面列出了创建基本表单的步骤:

向父元素<form> 添加 role="form"。

把标签和控件放在一个带有 class .form-group 的 <div> 中。这是获取最佳间距所必需的。

向所有的文本元素 <input>、<textarea> 和 <select> 添加 class .form-control。

<form role="form">
  <div class="form-group">
   <label for="name">名称</label>
   <input type="text" class="form-control" id="name" 
     placeholder="请输入名称">
  </div>
</form>

效果如下:

基于BootStrap与jQuery.validate实现表单提交校验功能

水平表单

在了解水平表单之间,我们应该对bootstrap的网格系统有所了解。

Bootstrap 包含了一个响应式的、移动设备优先的、不固定的网格系统,可以随着设备或视口大小的增加而适当地扩展到 12 列。它包含了用于简单的布局选项的预定义类,也包含了用于生成更多语义布局的功能强大的混合类。

响应式网格系统随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列,也就是说它是以百分比定义宽度的。

基于BootStrap与jQuery.validate实现表单提交校验功能

水平表单与其他表单不仅标记的数量上不同,而且表单的呈现形式也不同。如需创建一个水平布局的表单,请按下面的几个步骤进行:

向父 <form> 元素添加 class .form-horizontal

把标签和控件放在一个带有 class .form-group 的 <div> 中。

向标签添加 class .control-label

<form class="form-horizontal" role="form">
  <div class="form-group">
   <label for="firstname" class="col-sm-2 control-label">名字</label>
   <div class="col-sm-10">
     <input type="text" class="form-control" id="firstname" 
      placeholder="请输入名字">
   </div>
  </div>
</form>

效果如下:

基于BootStrap与jQuery.validate实现表单提交校验功能

jQuery.validate 自定义校验方法

自定义校验方法

// 手机号码验证
jQuery.validator.addMethod("isPhone", function(value, element) {
  var length = value.length;
  return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/.test(value));
}, "请正确填写您的手机号码。");

调用自定义校验

rules : {
  phone : {
      required : true,
      isPhone : true
    }
}

自定义错误显示

参数 类型 描述 默认值
errorClass String 指定错误提示的 css 类名,可以自定义错误提示的样式。 "error"
errorElement String 用什么标签标记错误,默认是 label,可以改成 em。 "label"
errorPlacement function 跟一个函数,可以自定义错误放到哪里。 input元素之后
success   要验证的元素通过验证后的动作,如果跟一个字符串,会当作一个 css 类,也可跟一个函数。
highlight function 可以给未通过验证的元素加效果、闪烁等。

register.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<link type="text/css" href="jslib/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet">
<script src="jslib/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="scripts/form.js" type="text/javascript"></script>
<script src="jslib/jQuery.validate/jquery.validate.js" type="text/javascript"></script>
<script src="jslib/bootstrap-3.3.5/bootstrap.min.js" type="text/javascript"></script>
<style type="text/css">
#register-form{
  border: 1px solid rgb(197, 197, 197);
  width: 1000px;
  margin: auto;
  border-image: none;
  padding: 30px;
  border-radius: 3px;
}
</style>
</head>
<body>
  <h1 class="text-center text-danger">用户注册</h1><br>
  <form id="register-form" role="form" class="form-horizontal" method="get">
    <div class="form-group">
      <label class="col-sm-2 control-label" for="firstname">用户名:</label>
      <div class="col-sm-5">
        <input class="form-control" id="firstname" name="firstname" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="password">密码:</label>
      <div class="col-sm-5">
        <input class="form-control" id="password" name="password" type="password" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="confirm_password">确认密码:</label>
      <div class="col-sm-5">
        <input class="form-control" id="confirm_password" name="confirm_password" type="password" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="email">E-Mail:</label>
      <div class="col-sm-5">
        <input class="form-control" id="email" name="email" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="phone">手机号码:</label>
      <div class="col-sm-5">
        <input class="form-control" id="phone" name="phone" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="tel">固定电话:</label>
      <div class="col-sm-5">
        <input class="form-control" id="tel" name="tel" />
      </div>
    </div>
    <div class="form-group">
      <label class="col-sm-2 control-label" for="address">家庭住址:</label>
      <div class="col-sm-5">
        <input class="form-control" id="address" name="address" />
      </div>
    </div>
    <div class="form-group">
      <div class="col-md-offset-2 col-md-10">
        <button type="submit" class="btn btn-primary btn-sm">注册</button>
        <button type="reset" class="btn btn-primary btn-sm">重置</button>
      </div>
    </div>
  </form>
</body>
</html>

form.js

$(document).ready(function() {
  // 手机号码验证
  jQuery.validator.addMethod("isPhone", function(value, element) {
    var length = value.length;
    return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/.test(value));
  }, "请正确填写您的手机号码。");
  // 电话号码验证
  jQuery.validator.addMethod("isTel", function(value, element) {
    var tel = /^(\d{3,4}-)?\d{7,8}$/g; // 区号-3、4位 号码-7、8位
    return this.optional(element) || (tel.test(value));
  }, "请正确填写您的电话号码。");
  // 匹配密码,以字母开头,长度在6-12之间,必须包含数字和特殊字符。
  jQuery.validator.addMethod("isPwd", function(value, element) {
    var str = value;
    if (str.length < 6 || str.length > 18)
      return false;
    if (!/^[a-zA-Z]/.test(str))
      return false;
    if (!/[0-9]/.test(str))
      return fasle;
    return this.optional(element) || /[^A-Za-z0-9]/.test(str);
  }, "以字母开头,长度在6-12之间,必须包含数字和特殊字符。");
  $("#register-form").validate({
    errorElement : 'span',
    errorClass : 'help-block',
    rules : {
      firstname : "required",
      email : {
        required : true,
        email : true
      },
      password : {
        required : true,
        isPwd : true
      },
      confirm_password : {
        required : true,
        isPwd : true,
        equalTo : "#password"
      },
      phone : {
        required : true,
        isPhone : true
      },
      tel : {
        isTel : true
      },
      address : {
        minlength : 10
      }
    },
    messages : {
      firstname : "请输入姓名",
      email : {
        required : "请输入Email地址",
        email : "请输入正确的email地址"
      },
      password : {
        required : "请输入密码",
        minlength : jQuery.format("密码不能小于{0}个字 符")
      },
      confirm_password : {
        required : "请输入确认密码",
        minlength : "确认密码不能小于5个字符",
        equalTo : "两次输入密码不一致不一致"
      },
      phone : {
        required : "请输入手机号码"
      },
      tel : {
        required : "请输入座机号码"
      },
      address : {
        required : "请输入家庭地址",
        minlength : jQuery.format("家庭地址不能少于{0}个字符")
      }
    },
    //自定义错误消息放到哪里
    errorPlacement : function(error, element) {
      element.next().remove();//删除显示图标
      element.after('<span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>');
      element.closest('.form-group').append(error);//显示错误消息提示
    },
    //给未通过验证的元素进行处理
    highlight : function(element) {
      $(element).closest('.form-group').addClass('has-error has-feedback');
    },
    //验证通过的处理
    success : function(label) {
      var el=label.closest('.form-group').find("input");
      el.next().remove();//与errorPlacement相似
      el.after('<span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>');
      label.closest('.form-group').removeClass('has-error').addClass("has-feedback has-success");
      label.remove();
    },
  });
});

以上所述是小编给大家介绍的基于BootStrap与jQuery.validate实现表单提交校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
简单实用的js调试logger组件实现代码
Nov 20 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
JS脚本defer的作用示例介绍
Jan 02 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
Extjs表单输入框异步校验的插件实现方法
Mar 20 Javascript
javaScript实现复选框全选反选事件详解
Nov 20 Javascript
vue实现个人信息查看和密码修改功能
May 06 Javascript
React路由鉴权的实现方法
Sep 05 Javascript
vue路由结构可设一层方便动态添加路由操作
Aug 31 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
详解js的事件代理(委托)
Dec 22 #Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 #Javascript
vue双向绑定的简单实现
Dec 22 #Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 #Javascript
深入理解jquery中extend的实现
Dec 22 #Javascript
jQuery插件DataTable使用方法详解(.Net平台)
Dec 22 #Javascript
JS实现间歇滚动的运动效果实例
Dec 22 #Javascript
You might like
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
php生成短网址示例
2014/05/05 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python调用C语言开发的共享库方法实例
2015/03/18 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
九州传奇上机题
2014/07/10 面试题
化工专业应届生求职信
2013/11/08 职场文书
行政专员的岗位职责
2014/03/10 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python