jQuery Validation Engine验证控件调用外部函数验证的方法


Posted in Javascript onJanuary 18, 2017

在使用jQuery Validation Engine的时候,我们除了使用自带的API之外,还可以自己自定义正则验证。自定义正则验证上一篇已经讲过了,如果想使用自定义函数进行验证怎么办?其实这个控件有个bug,在api中说

jQuery Validation Engine验证控件调用外部函数验证的方法

也就是在我们需要进行验证的地方加上funcCall[自定义函数名],但是我们会发现总会报错,说找不到你这个函数名。其实它的要求是要添加required进行综合验证,也就是validate[required,funcCall[yorn]],这样它才识别我们的自定义函数。但是我们就是不想要required这个呢?或者说我们在符合某种条件下才想让required这个非空验证功能生效呢?

<textarea class="m-area add-tw validate[funcCall[yorn]]" id="remark" cols="30" rows="10" ></textarea>

那么就需要使用以下几种方法综合施行,网上老外的解决办法就是在函数中push一个required,可以让其正常执行。

我定义了一个yorn的函数,而基本格式就是function yorn(field, rules, i, options){},其中field代表的是你验证的那个元素,我这里验证的是textarea,那么field就代表的是textarea。

jQuery Validation Engine验证控件调用外部函数验证的方法

首先我讲一下我要实现的功能,我的需求是在点击不通过且备注为空的时候触发验证,提示“必须填写内容”。那么在通过备注为空,通过备注不为空,不通过备注不为空的情况下都不能触发验证提示信息。而如果validate[required]这样的话,只要不填写备注信息都会触发提示信息。所以我的思路是,当点击保存按钮的时候判断,点击的是哪个radio,点击不通过的时候给不通过的radio添加一个自定义属性,同时赋值。而当点击通过radio的时候删除这个自定义属性。然后接着进入验证,也就是进入自定义函数,获取到不通过radio的自定义属性值,获取到备注的value,然后判断这两个条件是否同时成立,如果条件成立,则首先rules.push('required');因为我们前面说了如果想要实现自定义函数验证必须要有required,然后接着return options.allrules.required.alertText; 这句话是什么意思呢?就是返回你要提示的信息。而这个提示信息则另有地方进行设置。

html文件,validate[funcCall[yorn]]设置自定义函数validate[funcCall[自定义函数名]]

<form id="approval">//这个验证控件必须有form
      <div class="name-ipt">
        <div class="m-name"><span>意见:</span></div>
        <input type="radio" name="trial" class="m-radio col" />通过
        <input type="radio" name="trial" class="m-radio col" id="nocheck"/>不通过
      </div>
      <div class="name-ipt"></div>
      <div class="area-ipt add-td">
        <div class="m-name"><span>备注:</span></div>
        <textarea class="m-area add-tw validate[funcCall[yorn]]" id="remark" cols="30" rows="10"></textarea>
        <span class="m-span add-stl">剩余可输入1000字</span>
      </div>
    </div>
</form>
<div class="add-sb">
   <a href="#" class="save-btn m" ng-click="saveAudit()" >保存</a>
</div>
(有效:步骤1)

因为我是用的angular,所以给保存一个事件,在点击保存的时候触发事件,然后判断两个radio哪个被checked,其他的上面说过。接着触发验证进入自定义函数中。、、

//自己js文件中写
//保存
          $scope.saveAudit = function(){
            if($('#nocheck').attr('checked')){
              $("#remark").attr("trialAttr",'N');
            }else{
              $("#remark").removeAttr('trialAttr');
            }
            if($('#approval').validationEngine('validate')){
//验证通过的话之后要执行的内容
}
}
(有效:步骤2)

自定义函数必须带rules.push('required');同时return options.allrules.required.alertText;这个自定义函数写在自己的js文件里就行

//自己的js文件中写
function yorn(field, rules, i, options){
    var trialAttr = field.attr("trialAttr") ;
    var textareaval = field.val();

    if(trialAttr == "N" && textareaval==''){
      rules.push('required');
      return options.allrules.required.alertText;
    }
}
(有效:步骤3)

接下来要设置自定义提示信息了,找到jquery.validationEngine-zh_CN.js文件,然后在最下面自己跟随一个对象,函数名在前面,后面alertText后跟你要提示的信息。这样就OK了。

//这个在jquery.validationEngine-zh_CN.js中写

jQuery Validation Engine验证控件调用外部函数验证的方法

(有效:步骤4)

之前我在这个文件的下面按照api自定义了一个函数,但是发现根本无法执行,因为当进入验证的时候,首先判断validate[required,funcCall[yorn]]的自定义函数中是否存在required,如果不存在就无法进入到jquery.validationEngine-zh_CN.js这个文件中执行我们内部定义的函数。但是如果把自定义函数放在我们自己的js中,就会先执行我们自己js文件中的函数,最后才判断是否存在required,而这个时候我们已经push进去了,所以就不会报错说找不到你自定义函数名了。

jQuery Validation Engine验证控件调用外部函数验证的方法

(这个是无效且不可执行的,不要用)

这个验证控件其实挺不错的,只是这个bug给搞了半天,还好网上有解决办法,但是貌似没有一个像我说的这么清楚的,都是点明一下而已。希望能够帮助到大家,同时自己留存以后用。

Javascript 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
Angularjs过滤器使用详解
May 25 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
leaflet的开发入门教程
Nov 17 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
浅析vue深复制
Jan 29 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
原生js实现回复评论功能
Jan 18 #Javascript
js实现表格筛选功能
Jan 18 #Javascript
js放大镜放大购物图片效果
Jan 18 #Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 #Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 #Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 #Javascript
jQuery中的一些小技巧
Jan 18 #Javascript
You might like
杏林同学录(七)
2006/10/09 PHP
php中opendir函数用法实例
2014/11/15 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
loading动画特效小结
2017/01/22 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Vue自定义多选组件使用详解
2020/09/08 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
如何利用python进行时间序列分析
2020/08/04 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
化学工程专业求职信
2014/08/10 职场文书
十八大宣传标语
2014/10/09 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
浅谈Web Storage API的使用
2021/06/23 Javascript
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫