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 相关文章推荐
javascript倒计时功能实现代码
Jun 07 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
jquery实现漂亮的二级下拉菜单代码
Aug 26 Javascript
js实现上一页下一页的效果【附代码】
Mar 10 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
Sep 15 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 Javascript
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
Vue路由 重定向和别名的区别说明
Sep 09 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
十天学会php(1)
2006/10/09 PHP
如何开发一个虚拟域名系统
2006/10/09 PHP
php下将XML转换为数组
2010/01/01 PHP
ucenter通信原理分析
2015/01/09 PHP
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
python爬取抖音视频的实例分析
2021/01/19 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
写求职信有什么意义
2014/02/17 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
工会趣味活动方案
2014/08/18 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
新手入门Mysql--概念
2021/06/18 MySQL
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript