`
wuhui
  • 浏览: 52074 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Query的一个表单验证插件

阅读更多
有多种验证规则,同时,可以很方便的定义自己的规则。在此,说明一些常用的功能,详细的介绍,可以参考官方文档。http://docs.jquery.com/Plugins/Validation

validation插件使用很简单:
Javascript代码
$("#formId").validate(     
{     
        // 验证规则     
    rules:     
    {},     
    // 验证提示信息(失败时)     
        message:{},     
    errorElement: 'span',                       // 放置错误信息的元素,可以是其他的。     
    errorPlacement: function(error,element)     // 将错误提示信息放在什么地方     
    {},     
        // 成功时执行     
    success: function(label)     
    {     
        label.text(" ")                     // 将错误内容清空,一定要是" "有空格,否则IE有问题。     
            .addClass("success");     
             
    }     
});  

$("#formId").validate(  
{  
        // 验证规则  
    rules:  
    {},  
    // 验证提示信息(失败时)  
        message:{},  
    errorElement: 'span',                       // 放置错误信息的元素,可以是其他的。  
    errorPlacement: function(error,element)     // 将错误提示信息放在什么地方  
    {},  
        // 成功时执行  
    success: function(label)  
    {  
        label.text(" ")                     // 将错误内容清空,一定要是" "有空格,否则IE有问题。  
            .addClass("success");  
          
    }  
});

其中"formId"是表单的form元素的ID属性。

rules和message分别都对应一个对象,该对象只包含属性,其中,属性名为表单中input的name(包括select的name),值为要应用的规则对象。如:
Javascript代码
rules:{     
    userName:{     
        required:true,     
        maxlength:20,     
        emote: {     
             url: "ajax/validateUserName.action",     //后台处理程序     
             type: "post",               //数据发送方式     
             dataType: "json",           //接受数据格式        
                data: {                     //要传递的数据,默认已传递应用此规则的表单项     
                   email: function() {     
                      return $("#email").val();     
                }     
        }     
    }     
}  

rules:{  
    userName:{  
        required:true,  
        maxlength:20,  
        emote: {  
             url: "ajax/validateUserName.action",     //后台处理程序  
             type: "post",               //数据发送方式  
             dataType: "json",           //接受数据格式     
                data: {                     //要传递的数据,默认已传递应用此规则的表单项  
                   email: function() {  
                      return $("#email").val();  
                }  
        }  
    }  
}


message对应是一样的,只是把规则的值改为提示信息,如:required:‘必填项'。

validation内置的验证规则如下:

   required:true 必填

minlength:最小长度

maxlength:最大长度

rangelength: [3,10] 长度介于 3 和 {1} 之间的字符串

range:[100,1000] 只能是100和 1000 之间的值”

min:最小值

max:最大值

email:true 验证邮箱

url:true 验证是否是合法的网址

date:true 验证是否是合法的日期 new Date() 类型格式

dateISO:true 验证是否是合法的日期 年/月/日 或 年-月-日 格式

number:true 验证是否是合法的数字

digits:true 验证是否为整数

creditcard: 验证合法的信用卡号

equalTo:”要匹配的元素” 如:’#cnfpass’ , 验证两次输入值是否相同

accept: “gif|png|jpg” 验证是否是合法后缀名的字符串
Javascript代码
remote: {  
url: "ajax/validateUserName.action",     //后台处理程序  
type: "post",               //数据发送方式  
dataType: "json",           //接受数据格式     
data: {                     //要传递的数据,默认已传递应用此规则的表单项  
      email: function() {  
          return $("#email").val();  
      }  
}

remote: {
    url: "ajax/validateUserName.action",     //后台处理程序
    type: "post",               //数据发送方式
    dataType: "json",           //接受数据格式  
    data: {                     //要传递的数据,默认已传递应用此规则的表单项
        email: function() {
            return $("#email").val();
        }
    }

注意:remote是远程验证:比如注册验证用户名是否已被注册,返回值只能是true(验证成功)或false(验证失败)。

除了内置的验证规则,validation还允许自定义验证规则。这是通过validation的addMethod方法实现的,语法为:jQuery.validator.addMethod("name",function,message)。其中name为验证规则的名称,function定义验证的规则,message是验证失败时的提示信息。如:

Javascript代码
jQuery.validator.addMethod("ip", function(value, element) {     
    return this.optional(element) || (/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(value) && (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256));     
}, "Please enter a valid ip address.");     
// 增加只能是字母和数字的验证     
jQuery.validator.addMethod("chrnum", function(value, element) {     
    return this.optional(element) || (/^([a-zA-Z0-9]+)$/.test(value));     
}, "Please enter a valid format(charactors, A-Z, a-z, 0-9 only).");     
/**   
     * 自定义验证规则——对电话号码进行验证   
     */    
    $.validator.addMethod(     
        "isPhone",      
        function(value, element)      
        {        
            // “/\(?0\d{2,3}[) -]?\d{7,8}/”匹配电话号码的格式多种:010-82839278、(010)82839278、01082839278等,但是,这样有一个问题     
            // 如:(01082839278这样的也会匹配。当然可以用分支条件"|"解决,比较麻烦。而且以什么开始或结束也没有匹配。     
            // 为了简单起见,去掉有"()"的形式。匹配区号3位,则本地号8位,区号4位,则本地号7位的号码。     
            var tel = /^0\d{2}[-]?\d{8}$|^0\d{3}[-]?\d{7}$/;     
            return this.optional(element) || (tel.test(value));     
        }     
        , "电话号码格式不对."    
    );   

jQuery.validator.addMethod("ip", function(value, element) {  
    return this.optional(element) || (/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(value) && (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256));  
}, "Please enter a valid ip address.");  
// 增加只能是字母和数字的验证  
jQuery.validator.addMethod("chrnum", function(value, element) {  
    return this.optional(element) || (/^([a-zA-Z0-9]+)$/.test(value));  
}, "Please enter a valid format(charactors, A-Z, a-z, 0-9 only).");  
/**
     * 自定义验证规则——对电话号码进行验证
     */
    $.validator.addMethod(  
        "isPhone",   
        function(value, element)   
        {     
            // “/\(?0\d{2,3}[) -]?\d{7,8}/”匹配电话号码的格式多种:010-82839278、(010)82839278、01082839278等,但是,这样有一个问题  
            // 如:(01082839278这样的也会匹配。当然可以用分支条件"|"解决,比较麻烦。而且以什么开始或结束也没有匹配。  
            // 为了简单起见,去掉有"()"的形式。匹配区号3位,则本地号8位,区号4位,则本地号7位的号码。  
            var tel = /^0\d{2}[-]?\d{8}$|^0\d{3}[-]?\d{7}$/;  
            return this.optional(element) || (tel.test(value));  
        }  
        , "电话号码格式不对."
    ); 


还可以定义其他的验证规则。应用自定义的规则很容易,自定义规则和内置规则用法是一样的。

在此,提供一个有用的验证规则,那就是针对select下拉框的验证:

Javascript代码
/**   
     * 自定义验证规则——增加对select的验证   
     */    
    $.validator.addMethod(      
        "selectNone",               // name验证方法名     
        function(value, element)    // 验证规则     
        {     
            if (value == "none")    // select默认值需要设置为"none"(当然可以自定义其他值)     
            {      
                return false;      
            }      
            else      
            {     
                return true;      
            }     
        },      
        "必须选择一项"    // 默认验证消息(自定义规则信息的国际化是否不起作用?)     
    );   

/**
     * 自定义验证规则——增加对select的验证
     */
    $.validator.addMethod(   
        "selectNone",               // name验证方法名  
        function(value, element)    // 验证规则  
        {  
            if (value == "none")    // select默认值需要设置为"none"(当然可以自定义其他值)  
            {   
                return false;   
            }   
            else   
            {  
                return true;   
            }  
        },   
        "必须选择一项"    // 默认验证消息(自定义规则信息的国际化是否不起作用?)  
    ); 


二、验证信息的国际化

验证信息国际化是很方便的,默认验证信息是英文的,只需导入validation已写好的国际化文件,如:
Javascript代码
<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.js"></script>  

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.messages_cn.js"></script>

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.js"></script>

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.messages_cn.js"></script>

在验证时,去掉message,提示信息就会变成中文。

可以改国际化文件中的提示信息内容,使其更加个性化、符合项目要求。另外,如果在验证时使用了message,message中指定的字段提示信息会覆盖国际化文件中的信息。

这里有一个问题,国际化时似乎没法根据浏览器的locale来自动识别该用什么语言来显示。笔者测试了一下,当导入多国语言文件时,总是会使用最后一次导入的语言。因此,要实现真正的国际化,可以通过一个链接之类的来选择语言,然后用javascript来导入不同的语言文件。

三、远程验证

远程验证很有用,用户体验很好,因为不需要提交表单就知道自己注册用户的是否已被注册。validation插件通过remote规则来实现验证。在此讲解一下如果将请求提交给struts2的action来验证。

remote规则的格式为:
Javascript代码
remote: {  
    url: "ajax/validateUserName.action",     //后台处理程序  
    type: "post",               //数据发送方式  
    dataType: "json",           //接受数据格式     
    data: {                     //要传递的数据,默认已传递应用此规则的表单项  
        email: function() {  
            return $("#email").val();  
        }  

}

remote: {
    url: "ajax/validateUserName.action",     //后台处理程序
    type: "post",               //数据发送方式
    dataType: "json",           //接受数据格式  
    data: {                     //要传递的数据,默认已传递应用此规则的表单项
        email: function() {
            return $("#email").val();
        }

}

由于remote规则只允许后台返回true或false,因此struts2的action得不同于一般的action,不能返回一个字符串,然后dispatch一个视图之类的。研究之后,发现struts2中有一种result类型:stream,通过该类型可以实现返回true或false。action代码如下:
Java代码
view plaincopy to clipboardprint?  
// 定义返回的输入流     
    private InputStream inputStream;     
         
    // 定义需要到远程验证的字段     
    private String userName;     
    private String email;        
         
    // 定义返回值:只能为Boolean类型     
    private Boolean valid;     
         
    /**   
     * Action执行的方法:实现远程验证,将业务逻辑交给后台处理,并接收结果   
     * 同时,将结果返回。   
     * @return   
     */    
    public String execute()     
    {     
        // 根据userName判断该SP/CP是否已被注册;根据email判断该账号是否已被占用     
        if(spcpPreApprovalService.existSpcpAccount(userName, email))     
        {     
            valid = false;     
        }     
        else    
        {     
            valid = true;     
        }     
             
        inputStream = new ByteArrayInputStream(valid.toString().getBytes());     
             
        return Action.SUCCESS;     
    }     
    // 省略getter、setter  

view plaincopy to clipboardprint?
// 定义返回的输入流  
    private InputStream inputStream;  
      
    // 定义需要到远程验证的字段  
    private String userName;  
    private String email;     
      
    // 定义返回值:只能为Boolean类型  
    private Boolean valid;  
      
    /**
     * Action执行的方法:实现远程验证,将业务逻辑交给后台处理,并接收结果
     * 同时,将结果返回。
     * @return
     */
    public String execute()  
    {  
        // 根据userName判断该SP/CP是否已被注册;根据email判断该账号是否已被占用  
        if(spcpPreApprovalService.existSpcpAccount(userName, email))  
        {  
            valid = false;  
        }  
        else
        {  
            valid = true;  
        }  
          
        inputStream = new ByteArrayInputStream(valid.toString().getBytes());  
          
        return Action.SUCCESS;  
    }  
    // 省略getter、setter


struts.xml文件的配置为:

Xml代码
<package name="ajax" namespace="/ajax" extends="struts-default">
        <action name="validateSpId" class="validateSpcpAction">
            <result type="stream">
                <param name="contentType">text/html</param><!-- 默认为text/plain -->
                <param name="inputName">inputStream</param><!-- 默认就为inputStream -->
            </result>
        </action>
    </package> 

<package name="ajax" namespace="/ajax" extends="struts-default">
    <action name="validateSpId" class="validateSpcpAction">
       <result type="stream">
        <param name="contentType">text/html</param><!-- 默认为text/plain -->
        <param name="inputName">inputStream</param><!-- 默认就为inputStream -->
       </result>
    </action>
    </package>

这样便可以实现远程验证功能。

分享到:
评论

相关推荐

    jQuery formValidator表单验证插件

    Query formValidator表单验证插件开源了!!含API帮助、源码、示例。jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面的分离。对一个表单对象,你只需要写一行代码就可以轻松实现20多种脚本...

    jQuery的表单校验插件validate

    总之,`jQuery validate`插件是一个强大且灵活的表单验证工具,它可以帮助开发者轻松实现各种复杂的验证需求,提高Web应用的质量和用户体验。通过深入理解和熟练运用,可以极大地提高前端开发效率。

    微信小程序表单验证.rar

    在本案例中,我们关注的是名为“微信小程序表单验证.rar”的压缩包,它包含了一个名为“WxValidate”的插件,用于帮助开发者执行自定义的表单验证。 `WxValidate`插件是社区开发者为了解决微信小程序中表单验证问题...

    jquery.validationEngine 控件验证表单跟检测数据库是否有重名

    在Web开发中,表单验证是不可或缺的一环,它确保了用户输入数据的准确性和完整性。jQuery.validationEngine是一款强大的JavaScript验证插件,它能为HTML表单提供美观、自定义的验证效果。同时,结合后端数据库的检查...

    query效果静态页面

    jQuery是一个强大的JavaScript库,它简化了JavaScript代码的编写,使得网页动态化和用户交互变得更加容易。在这些静态页面中,开发者可能利用jQuery实现了如表单验证、元素动画、动态加载内容、事件处理等多种功能。...

    discuzx插件制作教程

    IS_ROBOT用来判断是否为机器人访问,而FORMHASH和HASH值则与表单验证相关。这些常量在程序中起到基础配置的作用。 全局变量$_G是一个包含许多常用数据的集合,如uid(用户ID),username(用户名),groupid(用户...

    谷歌浏览器 发送restful 请求插件

    总的来说,谷歌浏览器的RESTful请求插件提供了一个便捷的方式来测试和验证基于HTTP的RESTful API,通过设置不同请求类型和参数,用户可以全面检查API的功能和性能,是Web开发和测试环节中不可或缺的工具。

    网页模板——jQuery 日期时间输入格式插件.zip

    在网页应用中,用户经常需要输入或选择日期和时间,如预订系统、日程安排、表单验证等。手动输入日期和时间格式容易出错,用户体验也不佳。因此,日期时间输入格式插件能提供直观的UI,提高用户交互性和数据准确性。...

    使用Python的Flask框架表单插件Flask-WTF实现Web登录验证

    在Python的Web开发中,Flask是一个轻量级的框架,而Flask-WTF是Flask的一个扩展,它集成了WTForms库,用于处理表单数据。本文将深入讲解如何利用Flask-WTF来实现Web登录验证。 首先,我们要了解Flask-WTF的基本使用...

    jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法

    在使用jQuery Validate插件进行表单验证时,可能会遇到一个问题:当表单中有多个name属性相同的元素时,插件只会对第一个元素进行验证,而忽略后续的相同name属性的元素。这个问题在动态生成表单或者有复选框、多选...

    75款常用的jquery特效实例 jquery,经典 案例,图片切换效果,表单,

    此外,`validate()`插件是用于表单验证的强大工具,它可以自定义验证规则,提高用户体验。同时,使用`event.preventDefault()`可以阻止表单的默认提交行为,实现异步提交,使得用户在提交表单时无需页面刷新,提升...

    jquery文档,Query

    jQuery拥有丰富的插件生态,如jQuery UI(提供对话框、日历等组件)、jQuery Form(处理表单提交)和jQuery Validate(表单验证)等。这些插件极大地扩展了jQuery的功能。 **8. jQuery 应用场景:** jQuery 广泛...

    query资料大全 自己整理

    6. **插件生态**:jQuery拥有庞大的插件生态系统,如jQuery UI提供了一系列的用户界面组件,jQuery Validation用于表单验证,以及众多的滚动、弹出框、轮播图插件等。 7. **链式调用**:jQuery的方法返回的都是...

    JEECG Online 表单对外接口v3.61

    - 返回的数据结构通常包括一个表单对象列表,每个对象包含表单的基本信息如名称、创建人、创建时间等。返回的HTTP状态码一般为200表示成功,其他状态码则代表不同的错误信息。 **二、表单信息删除接口** 1. **...

    用js创建form表单并提交.docx

    10. **表单验证**:在实际应用中,通常需要对用户输入进行验证,确保数据的有效性和安全性。这可以通过JavaScript在客户端进行,也可以在服务器端进行。 以上就是对给定文档中涉及的JavaScript创建表单并提交的相关...

    jquery插件

    它们可以是用于数据可视化、表单验证、图像滑动、Ajax交互等各种用途。在jQuery中,插件通常是一个包含了自定义方法和行为的JavaScript对象或函数。 对于"jquery autocomplete",这是jQuery UI库中的一个组件,用于...

    实现extjs4 的树、grid、form、query等大部分组件的功能

    在项目“bookSys”中,可能就是构建一个图书管理系统,用户可以通过树形结构浏览书籍分类,使用网格展示具体书籍信息,通过表单进行书籍的添加、修改和查询操作。 EXTJS4的灵活性和强大功能使其在企业级Web应用开发...

    jquery插件集

    jQuery,一个轻量级、高性能的JavaScript库,极大地简化了DOM操作、事件处理、动画效果和Ajax交互。它以其简洁的API和广泛的社区支持,成为了Web开发中的首选工具之一。本资源集合包含了一系列jQuery插件,这些插件...

    jquery.validate.js 用法

    `jquery.validate.js` 是一款基于jQuery的表单验证插件,能够方便地实现客户端表单验证功能。该插件提供了丰富的内置验证方法,支持必填项检查、邮箱格式验证、URL验证等,并允许用户自定义验证规则与错误提示信息。...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    6.jQuery带Tips动画提示通用表单验证插件下载(jquery validate),动画效果漂亮 7.jQuery鼠标移到下载地址滑出气泡提示效果的插件 8.又一款jquery实现链接Tip演示下载 9.常用jQuery弹出式链接提示效果Tooltip...

Global site tag (gtag.js) - Google Analytics