概述

本文介绍Validate自定义表单校验方式。Validate插件虽然提供了丰富的验证规则,但在很多时候仍然很难满足我们的开发需求,在注册页面我们需要通过ajax验证用户输入的用户名是否已经被他人注册,那此时通过传统的Validate验证方式已经无法满足需求了! 我们可以通过自定义验证方法来结合ajax实现这个需求。

自定义ajax基本语法

因为validate是JQuery的插件,所以在此之前必须先导入JQuery和validate的JS包。

<script type="text/javascript">
    //下面开始自定义一个校验规则(addMethod方法传入两个参数,第一个是自定义校验规则的规则名称,第二个传入的是校验方法)
    $.validator.addMethod(
"规则名称",
function(value,element,params){
    //这个是验证所调用函数(校验函数),传入三个参数
    //value:输入的内容(表单元素输入的内容,如果此时username表单元素绑定了该校验规则,那么value就是在触发此校验规则时,用户输入的用户名)
    //element:被校验的元素对象
    //params:规则对应的参数值(例:在required:true 传入的params就是true)
}
    );
</script>

在这里需要明确的是

  • addMethod()方法中需要传入两个参数,第一个参数为自定义校验规则的规则名称,第二个为校验时所调用的方法(校验函数)。
  • 在传入的校验函数中有三个形参(具体作用前面已经指出)
  • 校验函数需要返回布尔值,如果返回为true,则不会显示绑定的提示信息。如果为false,就会显示绑定的信息(“用户名已存在”)

用户名的查重需求的具体实现

  • 前端页面实现
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <title>会员注册</title>
    </head>
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <!-- 引入表单校验jquery插件 -->
    <script src="js/jquery.validate.min.js" type="text/javascript"></script>
    <style>
    .error{
    color:red
    }
    </style>
    <script type="text/javascript">
    //自定义校验规则
    $.validator.addMethod(
    //规则的名称
    "checkUsername",
    //校验的函数
    function(value,element,params){
    //定义一个标志
    var flag = false;
    //此时使用ajax后台校验用户名是否正确
    $.ajax({
    "async":false,
    "url":"${pageContext.request.contextPath}/checkUsername",
    "data":{"username":value},
    "type":"POST",
    "dataType":"json",
    //这里的data是服务器传来的一个json字符串,前端解析为JS对象(里面包含是否存在该用户的信息)
    "success":function(data){
    //data.isExist==false代表服务器不存在该用户
    flag = data.isExist;
    }
    });
    //返回false代表该校验器不通过
    return !flag;
    }
    ); $(function(){
    $("#myform").validate({
    rules:{
    "username":{
    "required":true,
    "checkUsername":true
    }
    },
    messages:{
    "username":{
    "required":"用户名不能为空",
    "checkUsername":"用户名已存在"
    }
    }
    );
    });
    </script>
    <body>
    <form id="myform" class="form-horizontal" action="省略" method="post" >
    用户名<input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名">
    </form>
    </body>
    </html>
  • 后端页面实现
  • package com.web.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; import com.service.UserService; public class CheckUsernameServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String username=request.getParameter("username");
    UserService service=new UserService();
    //isExist代表用户名是否存在,true代表存在,false代表不存在
    boolean isExist=service.checkUserisExist(username);
    //封装json数据
    String json="{\"isExist\":"+isExist+"}";
    response.getWriter().write(json);
    } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    } }

在这里我们需要明确

  • ajax如何收服务器传来的数据的,在上面的ajax中定义了一个回调函数("success":function(data){...})。这个回调函数中有一个有一data参数,它代表服务器传递过来的数据,可能是js对象,也可能是个文本...。但在前面已经设置data是json("dataType":"json"),所以这里的data已经被解析为一个js对象了。所以我们可以通过data.isExist得到对象中的数据。
  • 服务器端如何传输JSON数据的,服务器端通过response.getWriter().wirte(json);即可传输数据。在服务器端的json字符串传到客户端后会自动解析为js对象。

下面是博主的其他文章,喜欢的博友们点个关注,谢谢您的支持。

Java8 Lambda表达式入门

JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰

EL表达式与JSTL简单入门

JSON转换工具的使用

                           

Validate插件的自定义验证方法入门(结合Ajax实现用户名的数据库查重)的更多相关文章

  1. jquery.validate remote 和 自定义验证方法

    jquery.validate remote 和 自定义验证方法 $(function(){ var validator = $("#enterRegForm").validate ...

  2. jquery validate.addMethod 正则表达式 (自定义验证方法)

    项目中使用的jQuery添加的校验的方法 $(document).ready(function(){         5           6/* 设置默认属性 */         7$.vali ...

  3. validate插件深入学习-04自定义验证方法

    自定义验证方法 jQuery.validator.addMethod(name,method,[,message]) name: 方法名 method: function(value,element, ...

  4. jqery validate、validate自定义验证方法 + jaery form Demo

    校验规则 required:true  必输字段 remote:"check.php"  使用ajax方法调用check.php验证输入值 email:true  必须输入正确格式 ...

  5. jQuery.validator.addMethod自定义验证方法

    在开发中用到了jQuery的validate控件,有时需要自定义验证方法.我们可以通过jQuery.validator.addMethod()来实现,下面是例子: <!DOCTYPE html ...

  6. Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...

  7. spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingExcept ...

  8. jquery validate 自定义验证方法

    query validate有很多验证规则,但是更多的时候,需要根据特定的情况进行自定义验证规则. 这里就来聊一聊jquery validate的自定义验证. jquery validate有一个方法 ...

  9. jquery.validate使用 - 自定义验证方法

    自定义jquery-validate的验证行为 1: 自定义表单提交 设置submitHandler来自定义表单提交动作 $(".selector").validate({    ...

  10. jquery validate 自定义验证方法 日期验证

    jquery validate有很多验证规则,但是更多的时候,需要根据特定的情况进行自定义验证规则. 这里就来聊一聊jquery validate的自定义验证. jquery validate有一个方 ...

随机推荐

  1. 1、android Studio 打Jar包

    1.创建一个AndroidStudio 工程 注意下面这个Package Name 2.进入Android Studio工程中 选择Project Flies 选项 然后找到 app->src- ...

  2. Hi3861编译烧录更快捷

     原文链接:https://mp.weixin.qq.com/s/TApbA6VUYUVWrGGaDyodbA,点击链接查看更多技术内容: HUAWEI DevEco Device Tool是华为面向 ...

  3. 如何使用 Grafana 监控文件系统状态

    当 JuiceFS 文件系统部署完成并投入生产环境,接下来就需要着手解决一个非常重要的问题 -- 如何实时监控它的运行状态?毕竟,它可能正在为关键的业务应用或容器工作负载提供持久化存储支持,任何小小的 ...

  4. 动态规划(四)——区间dp

    区间dp: 就是对于区间的一种动态规划,对于某个区间,它的合并方式可能有很多种,我们需要去枚举所有的方式,通常是去枚举区间的分割点,找到最优的方式(一般是找最少消耗). 通常都是先枚举区间长度,区间长 ...

  5. WEB 版的报表工具有没有意义?

    这个问题得从两个方面看. 如果这个 web 版的报表工具指的是现在的自助报表,也就是 BI.多维分析,那它是有意义的, 而且各厂商们都已经做的挺好,可以让业务人员通过简单的拖拽进行各种数据分析,生成自 ...

  6. 如何在报表中绘制 SVG 统计图

    SVG 作为一种矢量图形,具有任意缩放不失真.可被高质量打印.文件较小.交互性强等优势,正逐渐成为一种主流的图片格式.润乾报表一方面可以生成 SVG 格式的统计图,另一方面也可以在 HTML5 中直接 ...

  7. Effective Python:第1条 查询自己使用的Python版本

    命令行: python --version:通常可查看python2的版本: python3 --version:通常可查看python3的版本: 代码: import sys print(sys.v ...

  8. unity 3d导出安卓包时报错:A failure occurred while executing com.android.build.gradle.internal.tasks.workers$actionfacade see the console for details

    unity 3d导出安卓包时报错:A failure occurred while executing com.android.build.gradle.internal.tasks.workers$ ...

  9. PostgreSQL 14.4的安装以及使用以及一些安装的异常

    PostgreSQL 14的安装以及使用 因为公司的一些要求,可能要换数据库,虽然之前装过,但是版本感觉还是新一点比较好,所以重新装一下 首先下载文件,直接去官网下载就行 https://www.en ...

  10. Kruise Rollout:灵活可插拔的渐进式发布框架

    简介: Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架.Kruise Rollout 支持配合流量和实例灰度的金丝雀发布.蓝绿发布.A/B Testing 发布,以及 ...