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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值