`
zhangdaiscott
  • 浏览: 404167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8fb25857-16b4-3681-ab5e-e319f45c42a8
Jeecg快速开发平台
浏览量:0
文章分类
社区版块
存档分类

Easyui validatebox修改——1.当text发生变化时在校验,2.取消校验,3扩展自定义验证

 
阅读更多

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

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

[javascript]view plaincopy
  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. })

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

[javascript]view plaincopy
  1. box.unbind(".validatebox").bind("focus.validatebox",function(){
  2. if(box.val().length==0){
  3. _2e9.validating=true;
  4. if(_2e9.validating){
  5. _2ee(_2e8);
  6. }
  7. };
  8. }).bind("change.validatebox",function(){
  9. _2e9.validating=true;
  10. if(_2e9.validating){
  11. _2ee(_2e8);
  12. }
  13. })

2.取消校验:

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

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

3.扩展自定义验证:

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

[javascript]view plaincopy
  1. $.extend($.fn.validatebox.defaults.rules,{
  2. custom_reg:{
  3. validator:function(value,param){
  4. varm_reg=newRegExp(param[0]);<spanstyle="color:#ff0000;">//传递过来的正则字符串中的"\"必须是"\\"
  5. </span>if(!m_reg.test(value)){
  6. $.fn.validatebox.defaults.rules.custom_reg.message=param[1];
  7. returnfalse;
  8. }
  9. else{
  10. returntrue;
  11. }
  12. },
  13. message:''
  14. }
  15. });
使用方式如下:(两个参数,第一个是正则表达式,第二个是错误提示信息)
[javascript]view plaincopy
  1. <preclass="html"name="code"><inputid="txt_CustPhone"class="easyui-validateboxtxt-number"<spanstyle="color:#ff0000;">validType="custom_reg['^1\d{10}</span><spanstyle="color:#ff0000;">,'手机号码必须是11位数字!']"missingMessage="请输入客户电话!"</span>style="width:150px"required="true"/></pre>
  2. <pre></pre>
  3. <p>下面这个是远程效验(<spanstyle="color:#ff0000">这块使用的是同步模式,使用异步会在服务器返回值之前返回校验的结果值);</span></p>
  4. <preclass="javascript"name="code">$.extend($.fn.validatebox.defaults.rules,{
  5. custom_remote:{
  6. validator:function(value,param){
  7. varpostdata={};
  8. postdata[param[1]]=value;
  9. varm_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. returnfalse;
  18. }
  19. else{
  20. returntrue;
  21. }
  22. },
  23. message:''
  24. }</pre>
  25. <p></p>
  26. <p>用方式如下:(三个参数,第一个是调用的url,第二个是传递给服务器的参数名称,第三个是错误提示信息)</p>
  27. <preclass="html"name="code"><inputid="txt_cardid"<spanstyle="color:#ff0000;">class="easyui-validateboxtxt-number"required="true"missingMessage="请输入卡号!"
  28. validType="custom_remote['member.ashx?method=check_cardid','cardid','输入的卡号已使用!']"</span>style="width:150px"/></pre>
  29. <p>以下是前两个的结合,先用正则表达式本地验证,通过后在发送服务器验证;</p>
  30. <preclass="javascript"name="code">$.extend($.fn.validatebox.defaults.rules,{
  31. Composite_validation:
  32. {
  33. validator:function(value,param){
  34. varm_reg=newRegExp(param[0]);//传递过来的正则字符串中的"\"必须是"\\"
  35. if(!m_reg.test(value)){
  36. $.fn.validatebox.defaults.rules.Composite_validation.message=param[1];
  37. returnfalse;
  38. }
  39. else{
  40. varpostdata={};
  41. postdata[param[3]]=value;
  42. varresult=$.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. returnfalse;
  51. }
  52. else{
  53. returntrue;
  54. }
  55. }
  56. },
  57. message:''
  58. }
  59. });</pre>
  60. <p>用方式如下:(五个参数,第一个是正则表达式,第二个是错误提示信息,第三个是调用的url,第四个是传递给服务器的参数名称,第五个是错误提示信息)</p>
  61. <preclass="html"name="code">id="txt_CustIdentity"class="easyui-validateboxtxt-number"style="width:150px"
  62. <spanstyle="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><spanstyle="font-size:24px"><strong></strong></span></p>
  65. <p><spanstyle="font-size:24px"><strong>备注:本人水平有限,如有错误,欢迎大家拍砖及留言指正</strong></span>
  66. </p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics