我想允许用户在Web应用程序中输入人员列表,然后将其作为一个批次提交。每行看起来大致如下:
<TR>
<TD> <INPUT name="person.fname"> </TD>
<TD> <INPUT name="person.lname"> </TD>
<TD> <INPUT name="person.birthdate"> </TD>
</TR>
表单以单行空白输入开始,每当用户填写任何字段时,我都希望在列表中添加一个新行 - 即列表按需增长。同样,只要用户清除其中的所有字段,我想要一行消失。
实现此目的的最简单,最强大和最易维护的方法是什么?
最后,如何将此值表提交回服务器?为每个字段命名的首选方法是什么,以便服务器可以根据输入的值创建Person
个实体列表?
答案 0 :(得分:4)
如果您熟悉jQuery,则可以使用.change处理程序来捕获它们以更改字段。测试它是否是最后一行以及是否有数据。如果他们已将所有内容排除在行外,请将其删除。 jQuery有一些很好的方法可以做到这一点,但这完全取决于你想要如何编写它。如果是这样,请使用jQuery的.append函数追加新行。如果您使用的是Python和cgi_app,并且对每种类型的单元使用相同的name属性,则可以使用form.getlist('fname []'),它将返回一个名称数组。
答案 1 :(得分:2)
命名每个字段的首选方法是什么,以便服务器可以根据输入的值创建Person实体列表?
你可以这样做:
<TR>
<TD> <INPUT name="person[fname]"> </TD>
<TD> <INPUT name="person[lname]"> </TD>
<TD> <INPUT name="person[birthdate]"> </TD>
</TR>
生成数组'人'
答案 2 :(得分:0)
JQuery是一个很好的建议,但是如果你不想使用它,你可以尝试通过附加索引来生成输入名称。例如:
<TR> <TD> <INPUT name="person_0.fname"> </TD> <TD> <INPUT name="person_0.lname"> </TD> <TD> <INPUT name="person_0.birthdate"> </TD> </TR> ... <TR> <TD> <INPUT name="person_N.fname"> </TD> <TD> <INPUT name="person_N.lname"> </TD> <TD> <INPUT name="person_N.birthdate"> </TD> </TR>
其中“N”是行索引。这种方式可以帮助您通过使用(即)$ GET ['person '。$ i.'fname'],$ GET ['person 来轻松获取整个行值em>'。$ i.'lname'] ......等等。
答案 3 :(得分:0)
CSS:
input:not(:first-of-type){
display:none}
jQuery的:
$('input').click(function(){
$(this).val('');
}).blur(function(){
if($(this).val().length>1){
$(this)
.toggleClass('processed')
.hide('slow')
.parents('#person').find('input:not(.processed):first').show('slow');
}
});
$('#person').prepend('Click on blank space to proceed<br/>');
HTML:
<tr>
<form id=person method=post action='/your_page_on_server'>
<td><input name="fname" value='Enter the first name'/></td>
<td><input name="lname" value='Enter the last name'/></td>
<td><input name="birthdate" value='Enter the birth date'/></td>
<td><input type=submit value='Submit'/></td>
</form>
</tr>
我不熟悉服务器端脚本,所以我的回答只是部分的。这是一个example。 另外,我建议通过JS添加输入验证。