解决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;
}
相关推荐
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo