2011-12-22 45 views
3

我試圖從這兩個答案中拼湊出信息,但都不能用我可以外推的方式來解決問題, 。所以如果這看起來像重複,請不要懲罰我;我不認爲這是。在表單的輸入字段中使用jQuery克隆多維數組中的遞增鍵值

Increment multidimensional array when form fields are cloned

Copy table row and increment all name attributes

<tr> 
    <td><input type="text" name="pricing['prices'][0]['label']" value="" /></td> 
    <td><input type="text" name="pricing['prices'][0]['price']" value="" /></td> 
    <td><input type="text" name="pricing['prices'][0]['expires']" value="" /></td> 
    <td><input type="text" name="pricing['prices'][0]['bulk-price']" value="" /></td> 
    <td><input type="text" name="pricing['prices'][0]['bulk-qty']" value="" /></td> 
</tr> 

就是我試圖克隆,使用該按鈕:

<input type="button" id="newRowButton" value="Add Another Price" /> 

腳本(迄今爲止克隆的作品,但它不將「0」改爲「1」,我明顯錯過了將其他兩個答案中的例子拼湊在一起的東西)

$("#newRowButton").live('click',function(e) { 
    e.preventDefault(); 
    $("table.tablearray tr:last") 
     .clone() 
     .find(':input') 
     .each(function(){ 
      this.name = this.name.replace(/\[(\d+)\]$/, 
              function(str,p1){ 
               return '[' + (parseInt(p1,10)+1) + ']'; 
              }); 
     }) 
    .end() 
    .appendTo("table") 
}); 

任何幫助,將不勝感激。理想情況下,我也想添加一個「刪除行」按鈕。

+0

你可以修改的HTML(添加和屬性)? – xmarcos 2011-12-22 21:09:04

回答

6

從正則表達式取出$跡象所以它是這樣的:

$("#newRowButton").live('click',function(e) { 
    e.preventDefault(); 
    $("table.tablearray tr:last") 
     .clone() 
     .find(':input') 
     .each(function(){ 
      this.name = this.name.replace(/\[(\d+)\]/, function(str,p1){ 
       return '[' + (parseInt(p1,10)+1) + ']'; 
      }); 
     }) 
    .end() 
    .appendTo("table") 
}); 

$是迫使它尋求[0]在這是不是你有什麼名字的結尾。

工作演示在這裏:http://jsfiddle.net/jfriend00/S9Q8W/

+0

謝謝,我不知道'$'部分 – 2011-12-22 21:23:19

1

你有輕微的錯誤在你的正則表達式:

this.name = this.name.replace(/\[(\d+)\]$/, 

這僅匹配[0]時是結束元素的名稱,因爲$意味着」字符串的結尾「。如果你刪除,轉換工作正常:

this.name = this.name.replace(/\[(\d+)\]/, 
             function(str,p1){ 
              return '[' + (parseInt(p1,10)+1) + ']'; 
             }); 
相關問題