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 相关文章推荐
解析arp病毒背后利用的Javascript技术附解密方法
Aug 06 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 Javascript
基于JS实现限时抢购倒计时间表代码
May 09 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
Aug 24 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
JavaScript回调函数callback用法解析
Jan 14 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
Mar 07 Javascript
JS面向对象实现飞机大战
Aug 26 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
谈一谈收音机的高放电路
2021/03/02 无线电
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
js中的string.format函数代码
2020/08/11 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
python实现中文分词FMM算法实例
2015/07/10 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
初中优秀班集体申报材料
2014/05/01 职场文书
建筑学专业自荐书
2014/07/09 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
SQL Server 中的事务介绍
2022/05/20 SQL Server
vue实现在data里引入相对路径
2022/06/05 Vue.js