[jQuery] 動態插入元素之jQuery Validation失效處理

動態插入元素之jQuery Validation失效處理

問題描述

客戶希望在表單上透過動態的方式加入輸入框,並且可不斷的擴充增加元素;想當然爾,直接使用Ajax技術將所需之輸入框不斷的加入目標位置中,即達成客戶的需求。就在一切都很美好的情況下,針對各輸入框進行基本的前端驗證測試時卻發現,透過Ajax動態載入的輸入框之驗證會失效。

 

原因分析

仔細了解jQuery運作機制後發現,它會在網頁完全載入後呼叫$.validator.unobtrusive.parse(document)來解析所有需要檢核的元素;因此意味著後來透過Ajax載入的元素是不會被納入檢核範圍中的,所以必須強迫將所有須檢核之元素重新納入jQuery之檢核範圍中。詳細原理可參考暗黑執行緒文章謙卑式jQuery檢核範例-動態變更檢核設定有進一步的探討及說明。

 

解決方案

在送出資料前,移除所有的檢核設定再重新解析需要納入驗證的元素即可。


function ReParseValidation() {
    var forms = $("body").find("form");
    for (var i = 0; i < forms.length; i++) {
        var form = $(forms[i]);

        // 移除所有的檢核設定
        form.removeData("validator")
            .removeData("unobtrusiveValidation");

        // 重新解析元素的data-val-*標示
        $.validator.unobtrusive.parse(form);
    }
}

 

參考資料

http://stackoverflow.com/questions/14250032/jquery-validation-of-a-form-inserted-into-dom
http://blog.darkthread.net/post-2011-08-02-unobtrusive-jq-vald-dynamic.aspx


希望此篇文章可以幫助到需要的人

若內容有誤或有其他建議請不吝留言給筆者喔 !