关闭

Validation的onfocusout出错问题及valid()无法远程验证问题

标签: Validationvalidonfocusout
403人阅读 评论(0) 收藏 举报
分类:

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);//自定义的提交方法
}, 

问题成功解决。希望此文对碰到这个问题的朋友有所帮助。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:48304次
    • 积分:909
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:0篇
    • 译文:0篇
    • 评论:62条
    文章分类
    最新评论