2015-07-21 51 views
1

我有一個表單,用戶可以添加他打算購買/銷售的物品。我有相應的驗證規則如下:動態輸入數組元素的JQuery驗證

rules: { 
       'items[][name]': { 
        required: true 
       }, 
       'items[][description]': { 
        required: true 
       }, 
       'items[][rate]': { 
        required: true, 
        number: true 
       }, 
       'items[][quantity]': { 
        required: true, 
        number: true 
       } 
     } 
errorPlacement: function (error, element) { 
       error.appendTo('#' + element.attr('id') + '_error'); 
      } 

現在,用戶也可以增加新項目的形式的能力。爲此,我克隆第一行並將其追加到最後一行。相應的代碼如下:

var $clone = original.clone().removeAttr('id'); // original is the initial first row of items 
        $clone.find(':text') // get the text inputs 
         .val('') // reset their values 
         .removeClass('error'); // remove the error classes if any  

    /* 
    * I have an error span corresponding to each input where I display the errors. 
    * Here, i get the input and span elements, split them in two groups, then 
    * add a random seed to each of them to get a unique id to be used by jQuery errorHandler to place the error 
    */ 
        var $formElements = $clone.find('input:text, span'), 
         $even = $formElements.filter(':even'), 
         $odd = $formElements.filter(':odd'); 

        for (var i = 0; i < $even.length; i++) { 
         var idParts = $($even[i]).attr('id').split('__'); 
         var seed = Date.now(); 

         $($even[i]).attr('id', idParts[0] + seed + '_' + idParts[1]); 
         $($odd[i]).attr('id', idParts[0] + seed + '_' + idParts[1] + '_error'); 
        } 

我的問題是:

- >只有第一項行,創建靜態,被驗證。

我知道jQuery驗證器需要每個字段的唯一名稱。但是,在這種情況下,我需要一些項目。無論如何,即使新創建的項目字段具有相同的名稱,所以不應該自動驗證?

如果不是,那麼通過維護一系列項目是什麼工作?

在此先感謝。

+0

使用索引像這個小提琴http://jsfiddle.net/cjqvnnho/1/ – illusionist

回答

1

那麼通過維護一系列項目的工作是什麼?

他們必須均擁有獨特的name。所以,當你創建它們,請使用name索引像你已經做的id ...

item[1], item[2], etc. 

此外,當您創建它們,你可以使用the .rules('add') method的規則添加到每個元素。

換句話說,你不能簡單地克隆它們,並期望一切都能自動工作。