2009-06-11 9 views
2
<tr> 
<td><input name="of[1][dsn]" type="text" size="6" /></td> 
<td><input name="of[1][gc]" type="text" size="6" /></td> 
<td><input name="of[1][ys]" type="text" size="3" /></td> 
<td><input name="of[1][ym]" type="text" size="3" /></td> 
<td><input name="of[1][yl]" type="text" size="3" /></td> 
<td><input name="of[1][s]" type="text" size="3" /></td> 
<td><input name="of[1][m]" type="text" size="3" /></td> 
<td><input name="of[1][l]" type="text" size="3" /></td> 
<td><input name="of[1][xl]" type="text" size="3" /></td> 
<td><input name="of[1][xxl]" type="text" size="3" /></td> 
<td><input name="of[1][xxxl]" type="text" size="3" /></td> 
<td><input name="of[1][xxxxl]" type="text" size="3" /></td> 
<td><input name="of[1][xxxxxl]" type="text" size="3" /></td> 
<td><input name="of[1][total]" type="text" size="4" /></td> 
</tr> 

現在、これはjQueryを使用して複製されており、重複するたびに「名前」属性の数字が+1される場所にしたいと考えています。 "[1] [dsn]"から "[2] [dsn]"などに変更するにはどうすればよいですか?私が使ってみたのは以下の通りですが、既にそこにあったものを置き換えることができました。連続して入力する動的名を追加する

("input").each(function(index, element){$(element).attr("name", index);}); 

これは私が実際にテーブル行のクローンを作成するために使用していますものです:

var clonedRow = $("table tr:last").clone();  
$("table tr:last").clone(true).insertAfter("table tr:last").append(clonedrow); 
+0

コメントにrepsonseで自分の答えを更新しました。 –

答えて

1

このようなものが必要です。最初にクローンを作成した後、名前の数字を1つずつ増やして、それを各入力に適用してから、それらをDOMに挿入します。

var $cloned = $('#selector').clone(); 
var oldIndex = $cloned.find('input').attr('name').match(/\d+/); 
var newIndex = parseInt(oldIndex,10)+1; 
$cloned.find('input').each(function(){ 
    var newName = $(this).attr('name').replace(oldIndex, newIndex); 
    $(this).attr('name', newName); 
}); 
$cloned.appendTo('#something'); 

これは、増加する数は常に名前の文字列の最初の数(それはしかし、複数の桁であることができる)であることを前提としています。

編集あなたのコメントに応じて:あなたのコードの残りの部分でクローンオブジェクトを複製する必要があります。したがって、常に最新のクローンをクローンしてください。コードを次のように書き直す必要があります。

function clone(){ 
    var $cloned = $('table tr:last').clone(); 
    var oldIndex = $cloned.find('input').attr('name').match(/\d+/); 
    var newIndex = parseInt(oldIndex,10)+1; 
    $cloned.find('input').each(function(){ 
    var newName = $(this).attr('name').replace(oldIndex, newIndex); 
    $(this).attr('name', newName); 
    }); 
    $cloned.insertAfter('table tr:last'); 
} 
$('p.add-btn').click(clone); 
+0

これはうまくいくようですが、「2」の後に新しい番号が生成されるのをやめます.1.2..2..2になります。http://jsbin.com/izofo –

+0

Worked outすばらしいです。私を助けてくれてありがとう!ほんとうにありがとう! –

+0

問題ありません。喜んで助けてください。 –

0

jQuery clone機能をチェックして、それが助けかどうかを確認します。あなたはまだ名前を更新するために、いくつかの解析を行う必要があります。

+0

私はテーブル行を複製するために使用しているものを表示するように更新しました。イムは、どのようにアイデアを "解析する"ことについて行くのか分からないのですか? –

関連する問題