Javascript 什么';将输入名称动态添加到表单时,更新输入名称的最佳方法是什么?
当动态地向POST数组添加更多内容时,我正在尝试想出一种干净高效的方法来处理表单输入名称 例如,如果我有以下表格:Javascript 什么';将输入名称动态添加到表单时,更新输入名称的最佳方法是什么?,javascript,jquery,arrays,forms,dynamic,Javascript,Jquery,Arrays,Forms,Dynamic,当动态地向POST数组添加更多内容时,我正在尝试想出一种干净高效的方法来处理表单输入名称 例如,如果我有以下表格: <fieldset> <input type="text" name="users-0.firstname" /> <input type="text" name="users-0.lastname" /> </fieldset> 谢谢你的帮助。干杯。您考虑过使用基于数组的字段名吗?你根本不需要改变这些: <inp
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
谢谢你的帮助。干杯。您考虑过使用基于数组的字段名吗?你根本不需要改变这些:
<input type="text" name="users.firstname[]" />
<input type="text" name="users.lastname[]" />
当然,这是否适用于您将取决于您将如何处理字段。
<fieldset>
<input index=1 var=user prop=firstname />
<input index=1 var=user prop=lastname />
</fieldset>
<fieldset>
<input index=2 var=user prop=firstname />
<input index=2 var=user prop=lastname />
</fieldset>
$(文档).ready(函数(){
$('.addmore')。单击(函数(){
var fieldset=$(this.prev('fieldset');
var newFieldset=fieldset.clone();
增量字段集(newFieldset);
insertBefore($(this));
});
});
函数增量字段集(集合){
$(设置)。查找('input')。每个(函数(){
var oldName=$(this.attr('name');
var regex=/^(.*)-([0-9]+)\(.*)$/;
var match=regex.exec(oldName);
var newName=match[1]+'-'+(parseInt(match[2])+1)+'.+match[3];
$(this.attr('name',newName);
});
}
当我使用PHP时,我会使用该数组方法。该特定代码取自我正在处理的Pythons项目,该项目利用>将发布的数据转换为字典/列表。如果我有几百个输入(在一个表单上,就是这种情况),在一次点击中执行这些更改可能会导致浏览器性能下降。您有性能下降问题的测试数据吗?我在firefox上进行了测试,里面有2000个输入字段,用了不到1秒钟的时间更新了所有字段。我的评论是一个假设。我没有测试过。如果你不介意发布的话,我想看看你的名字代码?
$newset = updatenames($newset, $('fieldset').length +1);
$newset.insertBefore($button);
<input type="text" name="users.firstname[]" />
<input type="text" name="users.lastname[]" />
<fieldset>
<input index=1 var=user prop=firstname />
<input index=1 var=user prop=lastname />
</fieldset>
<fieldset>
<input index=2 var=user prop=firstname />
<input index=2 var=user prop=lastname />
</fieldset>
<%
for (int i = 0; i < 1000; i++) {
%>
<fieldset>
<input index=<%=i%> var=user prop=firstname />
<input index=<%=i%> var=user prop=lastname />
</fieldset>
<%
}
%>
$('button').click(function(){
$('input').each(function(i, node){
var $node = $(node);
$node.attr('name', $node.attr('var') + $node.attr('index') + "."+ $node.attr('prop'))
});
});
<script type="text/javascript">
$(document).ready(function () {
$('.addmore').click(function () {
var fieldset = $(this).prev('fieldset');
var newFieldset = fieldset.clone();
incrementFieldset(newFieldset);
newFieldset.insertBefore($(this));
});
});
function incrementFieldset(set) {
$(set).find('input').each(function () {
var oldName = $(this).attr('name');
var regex = /^(.*)-([0-9]+)\.(.*)$/;
var match = regex.exec(oldName);
var newName = match[1] + '-' + (parseInt(match[2]) + 1) + '.' + match[3];
$(this).attr('name', newName);
});
}
</script>
<fieldset>
<input type="text" name="users-0.firstname" />
<input type="text" name="users-0.lastname" />
</fieldset>
<input type="button" class="addmore" value="Add" />