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知识点收藏
Feb 22 Javascript
修改发贴的编辑功能
Mar 07 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
Sep 01 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
原生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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP小教程之实现链表
2014/06/09 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
在Python中进行自动化单元测试的教程
2015/04/15 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
思想政治自我鉴定
2013/10/06 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
劳动之星获奖感言
2014/02/01 职场文书
环保倡议书500字
2014/05/15 职场文书
生产助理岗位职责
2014/06/18 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android