2016-05-09 39 views
-1

我們知道有幾個插件可以在HTML表單上使用jQuery執行驗證。使用「驗證規則」驗證「運行時JSON數組」

我們使用jQuery Datatables,使用DataTables Editor進行內聯編輯。

https://editor.datatables.net/examples/api/clientValidation.html

的問題是各行提交,並在每一行是可編輯的幾個領域的時候,我們真的不想繼續寫「的if-else」的條件來驗證所有可能的編輯列。

當用戶編輯細胞,我們得到的是一個JSON名值陣列(當前行數據),例如在這種格式,

var rowData = { 
       fld_name1: "value1", 
       fld_name2: "value2", 
       fld_name3: "value3" 
       fld_name4: "value4" 
       fld_name5: "value5" 
      } 

要檢查,如果我們能養活這個數組任何驗證規則陣列,用於通過jQuery驗證插件使用例如格式,https://jqueryvalidation.org/files/demo/

rules: { 
      fld_name1: "required", 
      fld_name2: "required", 
      fld_name3: { 
       required: true, 
       minlength: 2 
      }, 
      fld_name4: { 
       required: true, 
       minlength: 5 
      }, 

      fld_name5: "required" 
     }, 

,並檢查當前的「rowData」驗證好與「規則」陣列定義的規則。

這裏「rowData」數組是動態數組,爲Datatable中的每個行創建了一個單獨的實例。

此外,HTML FORM元素(文本字段)由jQuery Datatables Editor動態生成。所以不要選擇在jQuery驗證插件上設置表單類型init。

我很擅長使用任何可以提供此運行時數組驗證功能的jQuery驗證。

+0

JQuery的數據表編輯器動態生成的飛行輸入表單域及相關信息。沒有包裝表單,因此我們可以調用.validate()。即使嘗試這樣做,它也會對現有數據表編輯器邏輯/偵聽器產生其他干擾。 將JSON數組(ROW數據)與驗證規則進行匹配的簡單解決方案。正在檢查此行中的解決方案,它可以匹配來自「rowData」和「rules」的規則,併爲與「rowData」中的數據不匹配或具有錯誤的規則輸出任何驗證消息。 – mike39

+0

問題在於要求爲「rowData」(動態JSON命名數組)與「規則」(預定義的驗證規則)匹配的解決方案。 不確定爲什麼問題被降級。我試圖找到解決實際問題的解決方案(「比較JSON命名數組」到「驗證規則」),而不重新開發所有驗證規則。 JQuery驗證插件似乎已經完成了對不同驗證組合的所有研究。公開功能不僅用於比較表單,而且還用於比較Dynamic JSON(Key:Value Pair)數組將使其成爲更加動態和實用的實用程序插件。 – mike39

回答

0

僅供參考,誰正在尋找一個JSON運行時命名的數組驗證解決方案的人,繼庫解決了這個問題,https://validatejs.org/

0

當用戶編輯單元格時,我們得到的是一個JSON名稱 - 值數組(當前行數據),例如以這種格式....希望檢查我們是否可以將此數組提供給任何驗證規則數組例如JQuery驗證插件使用的格式

您不能「動態」將任何內容送入rules對象。由於.validate()被稱爲一旦在頁面加載初始化插件,它不能被再次調用......它被忽略。

另外HTML FORM元素(Text Field)是由jQuery Datatables Editor動態生成的。所以不要選擇在jQuery驗證插件上設置表單類型init。

雖然無法初始化使用.validate()動態字段,顯影劑提供了一個名爲方法,可以調用動態分配,更新或刪除規則從任何形式的輸入元件隨時。所以你必須解析您的JSON數組和應用.rules(),你認爲合適......

$('[name="fld_name1"]').rules('add', { 
    required: true, 
    minlength: 2 
}); 

DEMO:http://jsfiddle.net/ejc1dq8g/

您可以一次應用到多個領域,只要你連接選擇器爲.each()

$('[name^="fld_"]').each(function() { 
    $(this).rules('add', { 
     required: true, 
     minlength: 2 
    }); 
}); 

備選地,可以簡單的任何形式的輸入元件和所述jQuery驗證插件將拾取器上使用HTML5 validation attributes和自動使用這些,即使是在動態創建的元素。

<input name="fld_name1" required="required" minlength="2" .... 

DEMO 2:http://jsfiddle.net/84zv61n4/


編輯

報價OP's Comment

「沒有包裝form本身上,我們可以請致電.validate()

如果是這樣的話,那麼絕對不能使用沒有<form></form>容器的jQuery Validate插件。沒有解決方法。我希望你會在OP中提到這個關鍵細節,因爲它可以節省時間&的努力。

+0

我們確實不會重寫Datatable Editors邏輯/偵聽器,並將它留在編輯器的表單元素生成和提交上。 我們想要應用這些驗證規則的地方是在向服務器發出Ajax請求之前,在Editors函數中,我們可以訪問JSON名稱/值數組對中的表數據。所以我們在這裏試圖驗證名稱數組爲驗證規則。 使用HTML5驗證屬性的第二種方法將需要擴展不同字段的Datatable編輯器功能。 – mike39

+0

@ mike39,看我的編輯。 – Sparky