Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何允许用户在HTML表中输入元素_Javascript_Html_User Interface_Data Entry - Fatal编程技术网

Javascript 如何允许用户在HTML表中输入元素

Javascript 如何允许用户在HTML表中输入元素,javascript,html,user-interface,data-entry,Javascript,Html,User Interface,Data Entry,我希望允许用户在web应用程序中输入人员列表,然后将其作为一批提交。每行大致如下所示: <TR> <TD> <INPUT name="person.fname"> </TD> <TD> <INPUT name="person.lname"> </TD> <TD> <INPUT name="person.birthdate"> </TD> </TR&

我希望允许用户在web应用程序中输入人员列表,然后将其作为一批提交。每行大致如下所示:

<TR>
    <TD> <INPUT name="person.fname"> </TD>
    <TD> <INPUT name="person.lname"> </TD>
    <TD> <INPUT name="person.birthdate"> </TD>
</TR>

表单以一行空白输入开始,每当用户填写任何字段时,我都希望在列表中添加一个新的行,即列表按需增长。同样,每当用户清除其中的所有字段时,我希望一行消失

实现这一点最简单、最健壮和最可维护的方法是什么


最后,如何将此值表提交回服务器?为每个字段命名的首选方法是什么,以便服务器可以根据输入的值创建一个
人员
实体列表?

如果您熟悉jQuery,可以使用.change处理程序捕捉他们更改字段的行为。测试以查看它是否是最后一行,以及其中是否有数据。如果他们从行中取出了所有内容,请将其删除。jQuery有一些很好的方法可以做到这一点,但这完全取决于您想要如何编写它。如果是这样,请使用jQuery的.append函数追加新行。如果您正在使用Python和cgi_应用程序,并且对每种类型的单元格使用相同的name属性,则可以使用form.getlist('fname[]),它将返回一个名称数组

命名每个字段的首选方式是什么,以便服务器可以根据输入的值创建个人实体列表

你可以做:

<TR>
    <TD> <INPUT name="person[fname]"> </TD>
    <TD> <INPUT name="person[lname]"> </TD>
    <TD> <INPUT name="person[birthdate]"> </TD>
</TR>


生成数组“person”

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'.$i.'lname']),这种方式可以帮助您轻松获取整行值。。。等等。

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/>');
$('input')。单击(函数(){
$(this.val(“”);
}).blur(函数(){
如果($(this.val().length>1){
$(本)
.toggleClass('已处理')
.hide('慢')
.parents('person').find('input:not(.processed):first').show('slow');
}
});
$(“#person”).prepend('单击空格继续
);
HTML:


我不熟悉服务器端脚本,所以我的回答只是部分。这是一个例子。 另外,我建议通过JS添加输入验证

<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>