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);//自定義的提交方法
},
問題成功解決。希望此文對碰到這個問題的朋友有所幫助。