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语句中的CDATA标签的意义
May 09 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
javascript中数组方法汇总
Jul 07 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
JavaScript Math.round() 方法
Dec 18 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
May 31 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
Aug 10 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 Javascript
JavaScript 去重和重复次数统计
Mar 31 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
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
javascript常用函数(2)
2015/11/05 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
Vue的Class与Style绑定的方法
2017/09/01 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Python输出9*9乘法表的方法
2015/05/25 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
Python自动发邮件脚本
2017/03/31 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
解决python对齐错误的方法
2020/07/16 Python
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
Oracle性能调优原则
2012/05/03 面试题
医学生职业生涯规划书范文
2014/03/13 职场文书
中国好声音华少广告词
2014/03/17 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS