Javascript 动态字段名称-应如何操作?
如下图所示,我想通过单击“添加更多产品”添加更多产品,然后将出现两个新元素(类别和项目下拉列表)。这将通过jQuery复制以前的Javascript 动态字段名称-应如何操作?,javascript,html,forms,jquery,Javascript,Html,Forms,Jquery,如下图所示,我想通过单击“添加更多产品”添加更多产品,然后将出现两个新元素(类别和项目下拉列表)。这将通过jQuery复制以前的并插入一个新的 创建元素时,动态字段的名称应该是什么?数据将被添加到$\u POST中,我可以插入到数据库中 HTML,请参见动态字段名称(例如:name=“items_2”,name=“items_2”): 我还添加了current\u added\u products字段的隐藏输入。这会告诉我当前添加了多少产品。不确定我是否需要这个 <ul>
并插入一个新的
创建元素时,动态字段的名称应该是什么?数据将被添加到$\u POST中,我可以插入到数据库中
HTML,请参见动态字段名称(例如:name=“items_2”
,name=“items_2”
):
我还添加了current\u added\u products
字段的隐藏输入。这会告诉我当前添加了多少产品。不确定我是否需要这个
<ul>
<li>
<label>Category</label>
<select name="category_1">
<option>CPU</option>
<option>HDD</option>
</select>
<select name="items_1">
<option>Item 1</option>
<option>Item 2</option>
<option>Item 3</option>
</select>
</li>
<li>
<label>Category</label>
<select name="category_2">
<option>CPU</option>
<option>HDD</option>
</select>
<select name="items_2">
<option>Item 1</option>
<option>Item 2</option>
<option>Item 3</option>
</select>
</li>
<li>
<label></label>
<input type="hidden" name="current_added_products" value="2" />
<input type="button" class="add_more_product" value ="Add More Product" />
</li>
</ul>
-
类别
中央处理器
硬盘驱动器
项目1
项目2
项目3
-
类别
中央处理器
硬盘驱动器
项目1
项目2
项目3
-
另外,在创建元素之前,如何获得要添加的下一个数字?您可以使用name=“item[1]”
,name=“item[2]”
。这将在您的$\u帖子['item']
中生成一个数组。请尝试以下操作:
$('.add_more_product').click(function() {
var $ul = $('ul:last');
$ul.clone().find('select').attr('name', function(i, cur) {
return cur.match(/\D+/g).join('') + (Number(cur.match(/\d+/g).join('')) + 1)
}).end().insertAfter($ul)
})
你可以给他们所有人一个
名称类别[]
和项目[]
,然后当他们被发布时,你将得到一个数字索引数组,这样你就不必担心在每个新创建的元素上追加一个数字。例如,选择带有项目1的CPU
和带有项目2的HDD
将在发布后产生以下结果:-
array
'category' =>
array
0 => string 'CPU' (length=3)
1 => string 'HDD' (length=3)
'items' =>
array
0 => string 'Item 1' (length=6)
1 => string 'Item 2' (length=6)
这将使添加新表单元素变得更加容易:-
html
<ul>
<li>
<label>Category</label>
<select name="category[]">
<option>CPU</option>
<option>HDD</option>
</select>
<select name="items[]">
<option>Item 1</option>
<option>Item 2</option>
<option>Item 3</option>
</select>
</li>
</ul>
<input type="button" class="add_more_product" value ="Add More Product" />
您可以使用以下代码替换从复制中获得的html
htmlCopy.replace(/category_[0-9]+/, function(a){
return "category_"+ (current_added_products+1);
});
htmlCopy.replace(/items_[0-9]+/, function(a){
return "items_"+ (current_added_products+1);
});
如上述答案所述,使用arayname
。要在数据库中添加更多内容,请使用以下代码:
if (!$con){
die('Could not connect: ' . mysql_error());
}
mysql_select_db($database, $con);
$authors = $_POST['Author'];
foreach($authors as $author) :
$sql="INSERT INTO savetest (type, number) VALUES ('{$_POST['type']}','{$author}')";
if (!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
}
endforeach;
更多帖子可以帮助您。谢谢!所以我想元素命名是好的?你觉得使用数组怎么样?示例:name=“category[]”
@我会回来的,不客气,这是一个很好的选择,而且更容易处理。
htmlCopy.replace(/category_[0-9]+/, function(a){
return "category_"+ (current_added_products+1);
});
htmlCopy.replace(/items_[0-9]+/, function(a){
return "items_"+ (current_added_products+1);
});
if (!$con){
die('Could not connect: ' . mysql_error());
}
mysql_select_db($database, $con);
$authors = $_POST['Author'];
foreach($authors as $author) :
$sql="INSERT INTO savetest (type, number) VALUES ('{$_POST['type']}','{$author}')";
if (!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
}
endforeach;