zoukankan      html  css  js  c++  java
  • 功能完善的 jquery validator 完成用户注册的验证

    布了 JQueryElement 3.6.1, 上次向大家提到了新的插件 Validator, 那么今天就好好的说明下这个验证插件吧.

    本文更新:

    2011-12-10: 增加 Async 属性参考.

    2011-12-12: 去掉 ParameterList 和 AjaxList.

    由于精力有限, 不能在多个博客中保证文章的同步, 可在如下地址查看最新内容, 请谅解:

    http://code.google.com/p/zsharedcode/wiki/JQueryElementValidatorDoc

    请到 Download 下载资源 的 JQueryElement 示例下载一节下载示例代码

    本文将系统讲解 Validator 控件的功能以及使用过程中的注意事项和技巧, 目录如下:

      * 准备

      * 客户端验证

        * 必需填写

        * 字符串长度范围

        * 数值大小范围

        * 验证邮箱, 网址, 日期

      * 获取是否验证成功和转化后的数据

      * 服务器端验证

     

    准备

    请确保已经在 http://code.google.com/p/zsharedcode/wiki/Download 中下载 JQueryElement 最新的版本.

    请使用指令引用如下的命名空间:

    <%@ Register Assembly="zoyobar.shared.panzer.JQueryElement"
    Namespace
    ="zoyobar.shared.panzer.ui.jqueryui.plusin"
    TagPrefix
    ="je"%>
    <%@ Register Assembly="zoyobar.shared.panzer.JQueryElement"
    Namespace
    ="zoyobar.shared.panzer.web.jqueryui"
    TagPrefix
    ="je"%>

    除了命名空间, 还需要引用 jQueryUI 的脚本和样式, 在 http://code.google.com/p/zsharedcode/wiki/Download 下载的压缩包中包含了一个自定义样式的 jQueryUI, 如果需要更多样式, 可以在 http://jqueryui.com/download 下载:

    <link type="text/css" rel="stylesheet" href="[样式路径]/jquery-ui-<version>.custom.css"/>
    <script type="text/javascript" src="[脚本路径]/jquery-<version>.min.js">
    </script><script type="text/javascript" src="[脚本路径]/jquery-ui-<version>.custom.min.js"></script>

    客户端验证

    通过简单的介绍 Validator 的属性, 便可以大致的了解如何进行客户端验证:

    DefaultValue 表示在用户没有输入值时的默认值, 可以设置为字符串, 数值等, 比如: 'abc', 100.

    Target/Equal 表示目标/匹配目标的选择器, 比如: #pw, #pw2, 不同于 Selector 属性, TargetEqual 不需要为选择器添加单引号, 如果不设置 Equal 则表示不判断两个目标的值是否相同.

    Tip 表示在不符合某个规则时的提示信息, SuccessTip 除外, 因为 SuccessTip 表示验证成功时的信息, 比如: MaxTip="最大值不能超过 100".

    Event 表示触发验证操作的事件, 默认为 change.

    Max/Min 如果数据为字符串, 则表示字符串的最大/最小长度, 如果数据为数值, 则表示数值的最大/最小值.

    Name 为验证项设置的名称, 一般不设置.

    Need 表示数据是否是必需的, 默认为 false.

    Provider 为一个自定义的格式转换函数.

    Reg 为一个数据必须符合的 javascript 正则表达式, 比如: /^d+$/.

    ShowTip 表示是否显示提示, 默认为 true.

    Type 表示一种数据类型, 可以是 string, number, boolean, date 中的一种, 如果设置为 string, number, boolean, 则表示数据应该可以被转化为字符串, 数值, 布尔值. 如果需要判断字符串最小长度大于等于 1, 在设置 Min="1" 的同时, 还需要设置 Type="string" 来表示是针对字符串的判断. 设置 Type 为 date 并不能判断数据是否为一个日期, 而是试图在 Ajax 中将数据转化为日期格式的字符串, 如果需要判断数据是否为日期格式, 请设置 Reg="$.panzer.reg.dateISO".

    必需填写

    设置 Need 属性为 true, 即可限制目标不能为空:

    <input id="email" type="text"/>
    <je:Validator ID="vEmail" runat="server" IsVariable="true"
    Target
    ="#email" Need="true"
    NeedTip
    ='<font color="red">请填写您的邮箱地址</font>'
    >
    </je:Validator>

    代码中, 设置 Target 为 #email, 表示 Validator 的验证目标是 id 为 email 的文本框. Need 设置为 true, 表示用户必须填写邮箱地址. NeedTip 表示在没有填写邮箱地址时的提示信息, 可以包含 html 代码.

    字符串长度范围

    通过设置 MaxMin 就可以限制字符串的长度, 建议同时设置 Type="string", 因为如果不设置数据类型和默认值, 那么没有输入值将默认为 '':

    <input id="password" type="password"/>
    <je:Validator ID="vPassword" runat="server" IsVariable="true" Target="#password"
    Min
    ="4" MinTip='<font color="red">密码长度至少 4 位</font>'
    Max="10" MaxTip='<font color="red">密码长度最多 10 位</font>'>
    </je:Validator>

    代码中并没有像建议中提到的设置 Type="string", 因为即便默认为 '', 长度仍然是小于 4 的.

    数值大小范围

    和限制字符串类似, 设置 MaxMin 同样可以限制数值的大小范围, 同时需要设置 Type="number":

    <input id="age" type="text"/>
    <je:Validator ID="vAge" runat="server" IsVariable="true" Target="#age"
    Type
    ="number" TypeTip='<font color="red">请填写一个数字</font>'
    Min="10" MinTip="不能小于 10 岁"
    Max="200" MaxTip="您还活着吗?">
    </je:Validator>

    验证邮箱, 网址, 日期

    使用 Reg 属性可以使验证的功能更大强大, 可以使用在 $.panzer.reg 中预设的几个正则表达式来判断邮箱等格式:

    <input id="email" type="text"/>
    <je:Validator ID="vEmail" runat="server" IsVariable="true" Target="#email"
    Reg
    ="$.panzer.reg.email" RegTip='<font color="red">请填写一个正确的邮箱地址</font>'>
    </je:Validator>

    除了使用 $.panzer.reg.email, 你还可以使用 url 来验证网址, 使用 dateISO 来验证格式类似于 '2011-1-1' 的字符串.

    获取是否验证成功和转化后的数据

    使用客户端属性 valid 可以获取某个 Validator 控件对应的目标验证是否通过, 使用 value 则可以获取目标包含的数据:

    function refresh(value, tip, valid) {

    if (vEmail.__validator('option', 'valid') &&
    vPassword.__validator('option', 'valid') &&
    vNickname.__validator('option', 'valid') &&
    vAge.__validator('option', 'valid'))
    cmdRegister.button('enable');
    else
    cmdRegister.button('disable');

    }

    代码中的 vEmail 等为 Validator 控件的 ID, 这需要设置 ValidatorIsVariable 属性为 true, 访问 validator 的 valid 属性, 可以获取到最后一次验证的结果, 如果返回 true, 则表示验证是成功的.

    javascript 函数 refresh 将设置为每一个 Validator 控件的 Checked 事件, 这样在 validator 验证完目标后会调用 refresh, 来决定是否让注册按钮可用.

    下面是注册按钮的代码, 点击按钮将调用方法 RegisterWeibo, 而参数的值是通过 validator 的 value 属性来获取的.

    <je:Button ID="cmdRegister" runat="server" IsVariable="true" Label="注册" Disabled="true">
    <ClickAsync Url="webservice.asmx" MethodName="RegisterWeibo" Success="
    function(data){
    alert(data);
    }
    "
    >
    <ParameterList>
    <je:Parameter Name="email" Type="Expression"
    Value
    ="vEmail.__validator('option', 'value')"/>
    <je:Parameter Name="password" Type="Expression"
    Value
    ="vPassword.__validator('option', 'value')"/>
    <je:Parameter Name="nickname" Type="Expression"
    Value
    ="vNickname.__validator('option', 'value')"/>
    <je:Parameter Name="age" Type="Expression"
    Value
    ="vAge.__validator('option', 'value')"/>
    </ParameterList>
    </ClickAsync>
    </je:Button>

    也可以设置 ParameterType 属性为 Selector, Value 为选择器来获取文本框的值, 并配合 DataType 来设置传递给服务器的数据类型, 而这里使用 validator 的 value 属性也能达到同样的效果, 因为 value 的类型也就是通过 ValidatorType 属性设置的类型.

    服务器端验证

    除了可以在客户端, 也可以在服务器端验证内容的合法性, 比如, 在服务器端验证昵称是否已经被注册:

    <input id="nickname" type="text"/>
    <je:Validator ID="vNickname" runat="server"
    Target
    ="#nickname"

    >

    <CheckAsync Url="webservice.asmx" MethodName="CheckNickname"
    Success
    ="
    function(pe, e){

    if(!e.valid && null != e.tip){
    pe.jquery.html(e.tip);
    }

    }
    "
    >
    </CheckAsync>

    </je:Validator>

    通过 CheckAsync 可以设置验证时的 Ajax 操作设置, 这里调用了服务器端的 CheckNickname 方法. 在 Success 属性中设置处理返回结果的 javascript 函数, 参数 e 包含 value, tip, valid, custom 四个属性, 分别表示验证后的值, 提示信息, 是否验证成功, 以及一个自定义对象, 参数 pe 的 jquery 属性表示 validator 自身.

    下面是服务器端的 CheckNickname 方法:

    [WebMethod]
    [ScriptMethod]
    public SortedDictionary<string, object> CheckNickname ( string value )
    {
    this.Context.Response.Cache.SetNoStore ( );

    SortedDictionary<string, object> values = new SortedDictionary<string, object> ( );
    values.Add ( "value", value );
    values.Add ( "tip", value == "abc" ?
    "<font color=\"red\">abc 这个昵称已经被注册了, 请换一个吧</font>" : null );
    values.Add ( "valid", value != "abc" );

    return values;
    }

    对于服务器端验证的方法应该具有名为 value 的参数, 参数的类型可以是 int, string, bool 等, 方法应该返回如下格式的 JSON:

    {
    "value": <值>,
    "tip": <提示>,
    "valid": <表示是否成功的布尔值, 为 true 或者 false>
    [, "custom": <自定义对象, 比如: { message: 'ok' }>]
    }

    JQueryElement 是开源共享的代码, 可以在 http://code.google.com/p/zsharedcode/wiki/Download 页面下载 dll 或者是源代码.

    实际过程演示: http://www.tudou.com/programs/view/vz3kFojbU58/, 建议全屏观看.

    修订历史

    2011-11-26: 修改关于引用 jQueryUI 的介绍.

  • 相关阅读:
    【转载】Git和Repo扫盲——如何取得Android源代码 .
    【转载】玩转C链表
    【转载】彩色 LCD 接口
    【转载】LCD DBI接口与DPI接口
    【原创】Display interface types supported
    【转载】交叉编译的基本概念
    【转载】谈谈Linux内核驱动的coding style
    深层神经网络
    Renju 方案(draft)
    Mathematica练习
  • 原文地址:https://www.cnblogs.com/zoyobar/p/JE_18.html
Copyright © 2011-2022 走看看