2009-06-11 6 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> 

J'ai actuellement ce être cloné en utilisant jQuery et je voudrais avoir à l'endroit où le numéro dans l'attribut « nom » est élevé par +1 à chaque fois qu'il est dupliqué. "de [1] [dsn]" à "de [2] [dsn]" etc. Comment puis-je faire cela? Ci-dessous ce que j'avais essayé d'utiliser, mais c'était à plat remplacer ce qui était déjà là.Ajouter nom dynamique à l'entrée séquentielle

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

C'est ce que j'utilise pour cloner en fait la ligne de table:

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

J'ai mis à jour ma réponse en réponse à votre commentaire. –

Répondre

1

D'accord, vous avez besoin de quelque chose comme ça. Premièrement, nous clonons, puis nous augmentons le nombre dans le nom de un, puis nous appliquons cela à chacune des entrées, puis nous les insérons dans le 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'); 

Cela suppose que le nombre d'augmenter est toujours le premier numéro dans la chaîne de nom (il peut cependant y avoir plusieurs chiffres).

Modifier En réponse à votre commentaire: Vous devez cloner l'objet cloné dans le reste de votre code. Donc toujours cloner le dernier clone. Vous devriez réécrire le code à quelque chose comme ceci:

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

Cela semble fonctionner, mais arrête de générer un nouveau nombre après "2" il va juste 1..2.2.2.2 .. vous pouvez voir le code ici: http://jsbin.com/izofo –

+0

génial. Merci de m'avoir aidé! J'apprécie vraiment cela! –

+0

Pas de problème. Heureux de vous aider. –

0

Vérifiez la fonction jQuery clone et voir si cela aide. Je pense que vous devrez toujours faire une analyse pour mettre à jour les noms.

+0

J'ai mis à jour pour montrer ce que j'utilise pour cloner la ligne du tableau. Je ne suis pas sûr de savoir comment faire pour "l'analyse" des idées? –

Questions connexes