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

問題成功解決。希望此文對碰到這個問題的朋友有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章