Javascript 动态创建多个组
在表单上,客户可以创建多个组。每个组都有相同的输入字段。如果客户单击“+附加组”,那么将通过jQuery动态创建附加组(html通过AJAX调用下载) 下面是示例html。每个Javascript 动态创建多个组,javascript,html,jquery,Javascript,Html,Jquery,在表单上,客户可以创建多个组。每个组都有相同的输入字段。如果客户单击“+附加组”,那么将通过jQuery动态创建附加组(html通过AJAX调用下载) 下面是示例html。每个ul标签都是一个组。在组ul中,每个输入字段包括一个组号字段。像这样:foo_1,foo_2 current_group是一个隐藏字段,用于跟踪组的总数 如果单击了add_group按钮,jQuery将从current_group获取组总数,然后动态获取附加组 应该这样做吗 此外,如果客户在完成表单时单击“提交”按钮,由于
ul
标签都是一个组。在组ul
中,每个输入字段包括一个组号字段。像这样:foo_1
,foo_2
current_group
是一个隐藏字段,用于跟踪组的总数
如果单击了add_group
按钮,jQuery将从current_group
获取组总数,然后动态获取附加组
应该这样做吗
此外,如果客户在完成表单时单击“提交”按钮,由于PHP验证错误,表单可能会返回到同一页面。我不想再次失去动态html组。如何解决这个问题
<h2> Group One </h2>
<ul class="Form">
<li>
<label>Foo</label>
<select name='foo_1'>
<option value='1'>One</option>
<option value='2'>Two</option>
<option value='3'>Three</option>
</select>
</li>
<li>
<label>Bar</label>
<select name='bar_1'>
<option value='car'>Car</option>
<option value='bike'>Bike</option>
<option value='van'>Van</option>
</select>
</li>
<ul>
<h2> Group Two </h2>
<ul class="Form">
<li>
<label>Foo</label>
<select name='foo_2'>
<option value='1'>One</option>
<option value='2'>Two</option>
<option value='3'>Three</option>
</select>
</li>
<li>
<label>Bar</label>
<select name='bar_2'>
<option value='car'>Car</option>
<option value='bike'>Bike</option>
<option value='van'>Van</option>
</select>
</li>
<ul>
<input type='hidden' id='current_group' value='2' />
<input type='button' id='add_group' value='+ Additional Group' />
第一组
-
福
一个
两个
三
-
酒吧
汽车
自行车
厢式货车
第二组
-
福
一个
两个
三
-
酒吧
汽车
自行车
厢式货车
做一件事有几种方法。这就是你的逻辑。如果不犯错误,它应该是有效的
无论何时提取和显示新组,都要保留一个名为group\u id[]
您将收到阵列中的所有组ID。您可以从$\u REQUEST['group\u id']访问该数组(您可以根据代码使用$\u POST或$\u GET)
现在,无论何时提交页面,请检查用户提交的组ID。您还可以接收下拉列表值。如果您需要再次显示这些组,您可以使用
$\u REQUEST['group\u ids']
从数据库中获取它,并通过将当前值与用户选择的值进行比较来保持选择正确的选项。如果第一组HTML元素已经存在,您可以始终使用jQuery来复制元素,而不是调用服务器。您需要找到元素并替换前面提到的名称
jQuery(".Form").clone().find("select").eq(0).prop("name", "foo_" + count).end().eq(1).prop("name", "bar_" + count).end().end().appendTo("#someElem");
以更可读的格式
var count = 1;
function addRow(){
count++;
var newFormElems = jQuery(".Form").clone(); //clone the form
var selects = newFormElems.find("select"); //find the selects
selects.eq(0).prop("name", "foo_" + count); //rename first
selects.eq(1).prop("name", "bar_" + count); //rename second
newFormElems.appendTo("#someElem"); //add to the page
}
重做命名函数的另一种方法是增加数字:
newFormElems.find("select").each(
function(){
this.name = this.name.replace(/^([^_]+_)(\d+)/, function(match,str,num){ return str + (parseInt(num,10)+1)});
}
);
处理动态形式的最佳方法是什么?您可以使用Ajax提交数据,或者在验证后使用php代码写出表单