使用 jQuery 将字段添加到表中的 HTML 表单中
Add a field to an HTML form in a table using jQuery
我有一个表,可以包含任意多行。其中每一行都包含表单域的一个元素。最初,它看起来像这样:
<table border="2" id="familyHeader">
<tr>
<th>Description</th>
<th>Still associated?</th>
</tr>
<tr id="addNewChildRow">
<td>
<input type="text" ....>
<input type="text" ....>
</td>
<td>
<input type="submit" ....> <!-- this is intentionally not part of a form element -->
</td>
</tr>
<form id="family" method="post" action="php/update_children.php">
<tr id="updateChildrenRow">
<td> > > > > > > </td>
<td>
<input type="submit" id="updateChildren" name="updateChildren" class="updateChildren" value="Update Children"/>
</td>
</tr>
</form>
</table>
所以基本上顶部允许您输入详细信息 - 第一个"提交"按钮上有一个捕获,可将行添加到表中。它使用这个JavaScript/jQuery将它们添加到最后一行之前(所以希望在表单元素中):
function insert_child(id, type, snumber, serialnumber)
{
$('#updateChildrenRow').before("<tr> <td>"+ type+" | "+snumber+" | "+serialnumber +"</td>"
//$('#family').append("<tr> <td>"+ type+" | "+snumber+" | "+serialnumber +"</td>"
+ "<td> <input type='"hidden'" name='""+id+"'" value='"false'" />"
+ "<input type='"checkbox'" checked='"true'" name='""+id +"'" value='"true'"/> </td>"
+ "</tr>");
}
这是有效的,因为它将元素插入正确的位置,但是当我们提交表单时,数据不会发布。但是,如果我们将表单元素打开移动到第二行并提交,则"addNewChildRow"按钮将被 POST (我认为这表明我的发布逻辑有效,但它只是没有检测到动态添加的字段)。
如您所见,我尝试附加到表单本身而不是表格,但这不起作用(它们没有显示) - 有谁知道将表单元素动态添加到表格中的诀窍是什么,在那里它们将被周围的表单"检测到"?
谢谢:)
这里的问题不在于"检测"添加的字段 - 这总是非常有效的。您真正的问题是您将"form"标签作为"table"的子标签,但这是不允许的,并且被浏览器视为错误。 浏览器试图修复它 - 并且不能做更多的事情,然后立即关闭"表单"标签并尝试将所有内容移出。(尽可能多地给你)。之后,它找到了一个丢失的"/form"并将其清除。
您的标记将转换为以下内容:
<table border="2" id="familyHeader">
.......
<form id="family" method="post" action="php/update_children.php"></form>
<tr id="updateChildrenRow">
<td> > > > > > > </td>
<td>
<input type="submit" id="updateChildren" name="updateChildren" class="updateChildren" value="Update Children"/>
</td>
</tr>
</table>
现在,您的新输入刚刚在表单外部创建。
要修复此问题,您可以执行以下操作之一:
- 将整个表格放入"表单"标签中。最简单的方法,但在这种情况下,您将有两个额外的输入(不是问题 - 只是不要添加 name 属性 - 并且它们不会被 POST ),并且您必须将第一个按钮的类型从"提交"更改为"按钮",这样它就不会触发表单提交。
- 将"form"标签放在表外的"td"或整个表单中。在这种情况下,您需要更改创建属性字段的方式,使其看起来完全符合您的要求。(请记住,您不能直接向表单添加新的"TD",您必须在表单内创建一个新表,并向其中添加单元格和行。您可以设置所有样式以获得所需的内容。
附言。此外,新创建的隐藏元素和复选框的名称相同。确定这正是您想要的 - 行为可能是意外的。
尝试做一个 $.ajax(type post) 或 $.post 并将 $('#family').serialize() 作为数据传递。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 多级HTML表单
- 使用html表单中的参数调用JavaScript函数
- javascript弹出窗口没有正确加载html表单
- Javascript/RegEx未验证HTML表单
- JavaScript”;复制“;HTML表单
- 使用Web Html表单创建Javascript数组
- 用PHP发送html表单和文件附件
- 单击鼠标,用MySQL数据填充html表单输入字段
- 从HTML表单发布blob的表单输入类型是什么
- 我的html表单无法验证.请参阅代码片段中的html代码和java脚本
- JavaScript-HTML表单到JSON(空值)和格式
- HTML表单将数据POST到MySQL
- 获取html表单信息并使用ajax将其推送到PHP
- 使用PHP通过HTML表单选项选择器过滤MYSQL结果
- javascript,HTML表单:单击按钮插入NULL
- 如何在HTML表单中提交我的下拉选择
- 将HTML表单发布到iframe会导致浏览器历史记录出现问题