解决jquery.validationEngine ajax验证不通过,还可以提交表单的问题

本文系属原创,转载注明出处,谢谢。   -AZ

由于最近项目是spring mvc + mybatis 还有一系列框架来开发,其中就包括这个js验证框架。

个人感觉其实挺方便的,但是有些地方还是不足(不知道是我没发现还是怎么地),一些基本的验证都可以满足我们的需求,而且简单如要求必填:validate[required]等等,这些基本的,我就不再叙述了,不懂的可以去网上查查。

(本文是需要对jquery.validationEngine有一定的了解)

主要是ajax验证这方面,出现问题较多,下面举出一个例子,希望能够帮助有这方面困惑的人。

如:我有一个字段名为accountName的输入框,要求在注册的时候ajax去服务器端验证是否在数据库中已经有这个名字了,如果有就提示,按照官网和网上的一些例子,大家都是知道的,需要在jquery.validationEngine-zh_CN.js中声明一个方法:

"ajaxUser": {
                    "url": "sys/account/validate"
                }

然后在输入框的类里面加上validate[required,custom[onlyLetterNumber ,ajax[ajaxUser]]]即可实现一些验证的基本操作。

但是有一个问题,不知道大家发现没有,当这个字段验证之后发现数据库中有这个用户名,并且给予了错误提示,还是可以提交表单(其他字段没有问题)。

我百思不得其解,硬着头皮看了它的源码,发现在jquery.validationEngine-zh_CN.js中的300多行处_onSubmitEvent的声明中,它居然只对那些没有声明为ajax[ajaxUser]的feild(字段)进行_checkAjaxFieldStatus验证,它给出的解释大概是:由于要提交ajax表单,所以我们不需要去验证这个ajax字段。它的意思是就是我们反正要提交过去,就没有必要在这验证了,反正就是没有验证,不符合我的要求

,我初略的看了它的源码,制定了一个解决方案与大家分享一下,如果有问题大家尽管提出来。

首先在jquery.validationEngine-zh_CN.js中将源码拉倒最后一段地方,找到:

$.validationEngine = {
        fieldIdCounter : 0,
        defaults : {

}

在里面最后加上一个自定义字段 ajaxField : ""

$.validationEngine = {
        fieldIdCounter : 0,
        defaults : {

        ...,

        ....,

        ajaxField : ""

}

然后在jsp页面,在将form表单绑定这个验证初始化处,加上要验证的字段,如:ajaxField:"accountName",

然后在jquery.validationEngine-zh_CN.js 中300多行的_onSubmitEvent里面加上:

//自己定义的验证
            if (options.ajaxField != "") {
                if (!methods._checkAjaxFieldStatus(options.ajaxField, options)) {
                    return false;
                }
            }

OK了,就是我们自己加上我们所需要的ajax验证字段.

----自定义验证函数-----

仿照主js文件的848行的结构模式,需要传递几个参数(field, rules, i, options)

function    customFunction(field,rules,i,options)

{

      var  reg = /\d+$/;

      if(!reg.test(field.val())){

               return   "出错信息!";

      }

     

}

然后在要验证的字段的类上添加这个方法validate[required,funcCall[customFunction]]

在提交的时候需要判断是否可以提交

if(!$("#fasttableForm").validationEngine("validate")){
    return;
  }

相关推荐