Je suis trynig à trouver une manière propre et efficace de gérer les noms d'entrée de formulaire lors de l'ajout dynamique de plus à la matrice POST.Quelle est la meilleure façon de mettre à jour les noms d'entrée lors de leur ajout dynamique à un formulaire?
Par exemple, si je la forme suivante:
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
Je puis cliquez sur un bouton « addmore » qui fait double emploi que HTML et ajoute de nouveau dans le document. Résultat:
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
J'essaie de trouver la meilleure façon d'augmenter cet indice de nom que je peux utiliser les données sur le serveur. Jusqu'à présent, je l'ai utilisé le code suivant:
$('.addmore').click(function()
{
var $button = $(this);
var $fieldset = $button.prev('fieldset');
var $newset = $('<div class="new">' + $fieldset[0].innerHTML + '</div>');
$newset.insertBefore($button);
updatenames($newset, $('fieldset').length + 1);
});
function updatenames($set, newIndex)
{
/*
updates input names in the form of
set-index.name
set-index
*/
var findnametype = function(inputname)
{
if (inputname.indexOf('-') != -1 && inputname.indexOf('.') != -1)
{
var data1 = inputname.split('-');
var data2 = data1[1].split('.');
// [type, set, index]
return [1, data1[0], parseInt(data2[0])]
}
if (inputname.indexOf('-') != -1 && inputname.indexOf('.') == -1)
{
var data = inputname.split('-');
return [2, data[0], data[1]];
}
return false;
};
var type = findnametype($set.find('input:eq(0)')[0].name);
$set.find('input, select').each(function()
{
var $input = $(this);
var oldname = $input[0].name;
var newname = false;
switch (type[0])
{
case 1: newname = oldname.replace('-' + type[2], '-' + newIndex);
break;
case 2: newname = oldname.replace('-' + type[2], '-' + newIndex);
break;
}
$input[0].name = newname;
});
return type;
}
Cette updatenames
fonction est une variante de ce que je me sers de ces derniers temps. Dans ce cas, je vérifie pour trouver le format du nom d'entrée. J'incrémente ensuite l'index.
L'incrémentation, comme vous l'avez probablement remarqué, se produit dans le DOM. En tant que «partie 2» à ma question, j'aimerais apprendre comment avoir cet objet retourné pour que je l'insère ensuite dans le DOM.
Quelque chose comme:
$newset = updatenames($newset, $('fieldset').length +1);
$newset.insertBefore($button);
Votre aide est appréciée. À votre santé.
Quand je travaille avec PHP, j'utilise cette méthode de tableau. Ce code particulier a été pris à partir d'un projet Pythons sur lequel je travaille qui utilise FormEncode pour convertir les données POSTed en dictionnaire/liste – dave