Я пытаюсь придумать чистый и эффективный способ обработки входных имен форм при динамическом добавлении большего в массив POST.
Например, если у меня есть следующая форма:
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
Затем я нажимаю кнопку «addmore», которая дублирует этот HTML-код и добавляет его обратно в документ.В результате:
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
Я пытаюсь найти лучший способ увеличить этот индекс имени, чтобы я мог использовать данные на сервере.До сих пор я использовал следующий код:
$('.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;
}
Эта функция updatenames
является вариантом того, что я использовал в последнее время.В этом случае я проверяю, чтобы найти формат имени ввода.Затем я увеличиваю индекс.
Увеличение, как вы, наверное, заметили, происходит в DOM.В качестве «части 2» моего вопроса я хотел бы узнать, как вернуть этот объект для меня, чтобы затем вставить в DOM.
Что-то вроде:
$newset = updatenames($newset, $('fieldset').length +1);
$newset.insertBefore($button);
помощь приветствуется.Приветствия.