settings[eventType].call is not a function错误
使用Validation验证框架时,会需要在文本域失去焦点时触发对当前文本域验证。
不设置onfocusout属性,默认在失去焦点时是触发验证的,不清楚状况的在修改onfocusout的值时会想当
然的认为开启或关闭这个功能只要把他设置成true或false即可,我在使用时就是这样,设置了true,导致在
js中报出了错误:
TypeError: settings[eventType].call is not a function错误
一阵蛋疼后果断翻API,这是官网onfocusout属性的API:
原来如此,果断去除 onfocusout:true, 问题解决!
翻看了下Validation中onfocusout源码:
onfocusout: function( element ) {
if(!this.checkable(element) && (element.name in this.submitted || !this.optional(element))){
this.element(element);
}
},
所以在开启这个功能时也可以这样:
onfocusout:function(element) { $(element).valid(); },
同样的属性还有onkeyup和onclick!
valid()无法远程验证
使用Validation框架,.valid()方法会对表单中所有需要验证的文本域进行验证,valid()不接受任何参数,返回值是
boolean,验证不通过返回false,通过返回true。
看到这个方法欣喜若狂,可以把“添加验证”和“进行验证”分离开了;是这样分离的:
1、表单加载完后使用form.validate()添加验证
2、表单的提交按钮使用button,点击触发自定义的提交事件submitForm
3、submitForm中使用form.valid()方法,判断表单是否验证通过,通过即提交表单
这样如果要把验证去掉就只去掉第一步就可以了
这中方式在表单的长度、类型等验证中都能正常使用;不过,当表单中存在remote远程验证的话,就不灵了,
这应该是Validation的一个bug。
无奈只能使用.validate()的submitHandler,不过这种就不能算“分离”了:
submitHandler: function(form){
ajaxSubmit(form);//自定义的提交方法
},
问题成功解决。希望此文对碰到这个问题的朋友有所帮助。