关于easyui校验规则定时验证bug的修改

1.当text发生变化时在校验:

      Easyui validatebox个人感觉还是比较好用的,但是发现他不是只有text改变并离开编辑框的时候才验证,而是不停的做验证;如果是js脚本的本地验证还好,如果是远程验证(如:调用数据库检测信息是否已存在)那就不停的向服务器发送请求,这就比较麻烦啦;通过查看Easyui validatebox的js脚本文件,发现Easyui validatebox尽然是在编辑框获得焦点之后,启用了定时器来不停的做校验的,郁闷!源码如下:

复制代码
1 box.unbind(".validatebox").bind("focus.validatebox",function(){
2 _2e9.validating=true;
3 (function(){
4 if(_2e9.validating){
5 _2ee(_2e8);
6 setTimeout(arguments.callee,200);
7 }
8 })();
9 })
复制代码

找到问题,那就修改,将上面的代码替换成下面的代码,保证只在获取焦点并且值为空或者值发生改变时进行校验;

按 Ctrl+C 复制代码
box.unbind(".validatebox").bind("focus.validatebox", function() {
            if (box.val().length == 0) {
                _2e9.validating = true;
                if (_2e9.validating) {
                    _2ee(_2e8);
                }
            };
        }).bind("change.validatebox", function() {
            _2e9.validating = true;
            if (_2e9.validating) {
                _2ee(_2e8);
            } 
        })
按 Ctrl+C 复制代码

2.取消校验:

       当把包含Easyui validatebox的div转换成dialog显示时,如果本次的校验未通过,然后取消了本次操作,那么本次的校验会保留,如果在打开dialog重新赋空值或正确的值,但是还是显示验证未通过,给用户造成错觉,但是Easyui validatebox并不提供取消校验的方法,查看源码发现可以通过如下方式取消验证不通过的标识(那个红色感叹号和错误消息),为了更好的控制,这条语句的设计是一次取消一个validatebox的验证标识(elemId为validatebox的id)

$("#" + elemId).removeClass('validatebox-invalid');

3.扩展自定义验证:

            Easyui validatebox提供了验证方式的扩展,但是如果一次扩展一条的话,没新增有一种就需要该一次js文件,比较麻烦,我做了一个正则表达式效验,这样使用时只需要在相应的Easyui validatebox的aspx页面的定义是加入效验的侦测表达式即可,源码如下:

复制代码
 1     $.extend($.fn.validatebox.defaults.rules, {
 2            custom_reg: {
 3             validator: function(value, param) {
 4                 var m_reg = new RegExp(param[0]); <span style="color:#ff0000;">//传递过来的正则字符串中的"\"必须是"\\"
 5 </span>                if (!m_reg.test(value)) {
 6                     $.fn.validatebox.defaults.rules.custom_reg.message = param[1];
 7                     return false;
 8                 }
 9                 else {
10                     return true;
11                 }
12             },
13             message: ''
14         }
15        });
复制代码

使用方式如下:(两个参数,第一个是正则表达式,第二个是错误提示信息)

复制代码
 1 <pre class="html" name="code"><input id="txt_CustPhone" class="easyui-validatebox txt-number" <span style="color:#ff0000;">validType="custom_reg['^1\d{10}</span><span style="color:#ff0000;">,'手机号码必须是11位数字!']" missingMessage="请输入客户电话!"</span> style="width:150px" required="true"/></pre>
 2 <pre></pre>
 3 <p>下面这个是远程效验(<span style="color:#ff0000">这块使用的是同步模式,使用异步会在服务器返回值之前返回校验的结果值);</span></p>
 4 <pre class="javascript" name="code">$.extend($.fn.validatebox.defaults.rules, {
 5         custom_remote: {
 6             validator: function(value, param) {
 7                 var postdata = {};
 8                 postdata[param[1]] = value;
 9                 var m_result =$.ajax({ type: "POST",//http请求方式
10                     url: param[0],    //服务器段url地址
11                     data:postdata,      //发送给服务器段的数据
12                     dataType: "type", //告诉JQuery返回的数据格式
13                     async: false
14                 }).responseText;
15                 if (m_result == "False") {
16                     $.fn.validatebox.defaults.rules.custom_remote.message = param[2];
17                     return false;
18                 }
19                 else {
20                     return true;
21                 }
22             },
23             message: ''
24         }</pre>
25 <p> </p>
26 <p>用方式如下:(三个参数,第一个是调用的url,第二个是传递给服务器的参数名称,第三个是错误提示信息) </p>
27 <pre class="html" name="code"><input id="txt_cardid" <span style="color:#ff0000;">class="easyui-validatebox txt-number" required="true" missingMessage="请输入卡号!"
28  validType="custom_remote['member.ashx?method=check_cardid','cardid','输入的卡号已使用!']" </span>style="width:150px"/></pre>
29 <p>以下是前两个的结合,先用正则表达式本地验证,通过后在发送服务器验证;</p>
30 <pre class="javascript" name="code"> $.extend($.fn.validatebox.defaults.rules, {
31         Composite_validation:
32         {
33             validator: function(value, param) {
34                 var m_reg = new RegExp(param[0]); //传递过来的正则字符串中的"\"必须是"\\"
35                 if (!m_reg.test(value)) {
36                     $.fn.validatebox.defaults.rules.Composite_validation.message = param[1];
37                     return false;
38                 }
39                 else {
40                     var postdata = {};
41                     postdata[param[3]] = value;
42                     var result = $.ajax({
43                         url: param[2],
44                         data: postdata,
45                         async: false,
46                         type: "post"
47                     }).responseText;
48                     if (result == "False") {
49                         $.fn.validatebox.defaults.rules.Composite_validation.message = param[4];
50                         return false;
51                     }
52                     else {
53                         return true;
54                     }
55                 }
56             },
57             message: ''
58         }
59     });</pre>
60 <p>用方式如下:(五个参数,第一个是正则表达式,第二个是错误提示信息,第三个是调用的url,第四个是传递给服务器的参数名称,第五个是错误提示信息)</p>
61 <pre class="html" name="code">id="txt_CustIdentity" class="easyui-validatebox txt-number" style="width:150px" 
62 <span style="color:#ff0000;">validType="Composite_validation['^\\d{14}(\\d{1}|\\d{4}|\\d{3}x),'身份证号码为15或18位数字!','member.ashx?method=check_Identityid','Identityid','该身份证号已办卡!']" missingMessage="请输入身份证号码!" </span>required="true" /></pre>
63 <pre></pre>
64 <p><span style="font-size:24px"><strong></strong></span> </p>
65 <p><span style="font-size:24px"><strong>备注:本人水平有限,如有错误,欢迎大家拍砖及留言指正</strong> </span>
66 </p>
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值