【发布时间】:2011-04-03 00:07:01
【问题描述】:
当动态向 POST 数组添加更多内容时,我正在尝试提出一种简洁有效的方式来处理表单输入名称。
例如,如果我有以下表格:
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
然后我单击“添加更多”按钮,该按钮复制该 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);
感谢您的帮助。干杯。
【问题讨论】:
标签: javascript jquery arrays forms dynamic