我試圖想出一個乾淨有效的方式來處理表單輸入名稱時,動態添加更多的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中。作爲我的問題的「第二部分」,我想了解如何讓該對象返回給我,然後插入到DOM中。
喜歡的東西:
$newset = updatenames($newset, $('fieldset').length +1);
$newset.insertBefore($button);
您的幫助表示讚賞。乾杯。
當我用PHP的工作,我使用該陣列的方法。該特定代碼來自我正在使用的Pythons項目,該項目利用FormEncode將發佈的數據轉換爲字典/列表 – dave 2010-08-24 06:32:23