我正在一个网页上工作,该网页列出了数据库中的几个租借预订。我想我可能已经把自己建在了一个角落里。我最初每排有3个单元格,每个单元格包含一个由2或3个隐藏字段组成的小字体,以及一个按钮,用于编辑","返回"或"取消"预订。
那些工作正常,并且都是有效的,因为每个整个表单都在一个单元格内。
现在我需要添加功能以允许选择多行,并将它们传递到另一个页面。所以不假思索地,我添加了一个围绕整个表格的<form>
,为每一行添加了一个复选框,并在表格的底部添加了一个提交按钮。
经过一些研究,我非常确定XHTML中不允许使用嵌套表单。但该文件仍然以某种方式验证了W3C验证器。我正在使用XHTML 1.0 Transitional。也许是因为它不是<form>
直接位于另一个<form>
内,而是<form>
位于<table>
内的<form>
?这是允许的吗?
表单按原样运行(它从顶行提交了一些额外的字段,但如果必须,我可以忽略它们。)
我只是害怕实施这个,因为我觉得这样做是不对的。如果有人能澄清这是否有效我会非常感激。如果不是,你有什么建议来解决它吗?
提前致谢!
<form id="form2" name="form2" method="post" action="pickup.php">
<table width="1200" border="1" align="center" cellpadding="5" cellspacing="0" style="border-collapse:collapse; border-color:#CCC;">
<tr>
<td colspan="10" bgcolor="#CCCCCC"><h2>Equipment Being Picked Up Today</h2></td>
</tr>
<tr class="highlight">
<td><input type="checkbox" name="res1" id="res1" value="2278" /></td>
<td>George Washington</td>
<td>555-333-4444</td>
<td><a href="product.php?sku=R6209" target="_self">Lghting kit 6209</a></td>
<td>2/12/15</td>
<td>2/13/15</td>
<td></td>
<td align="center">
<form name="editForm" method="post" action="edit.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2278" />
<input type="submit" name="edit" value="edit" />
</form>
</td>
<td align="center">
<form name="returnForm" method="post" action="today2.php">
<input name="reservationID" type="hidden" value="2278" />
<input name="return" type="hidden" value="yes" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input type="submit" value="return" />
</form>
</td>
<td align="center">
<form name="cancelForm" method="post" action="cancel.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2278" />
<input type="submit" name="cancel" value="cancel" />
</form>
</td>
</tr>
<tr class="highlight">
<td><input type="checkbox" name="res2" id="res2" value="2279" /></td>
<td>Sam Adams</td>
<td>333-222-7777</td>
<td><a href="product.php?sku=R8300" target="_self">camera kit 3456</a></td>
<td>2/12/15</td>
<td>2/13/15</td>
<td></td>
<td align="center">
<form name="editForm" method="post" action="edit.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2279" />
<input type="submit" name="edit" value="edit" />
</form>
</td>
<td align="center">
<form name="returnForm" method="post" action="today2.php">
<input name="reservationID" type="hidden" value="2279" />
<input name="return" type="hidden" value="yes" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input type="submit" value="return" />
</form>
</td>
<td align="center">
<form name="cancelForm" method="post" action="cancel.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2279" />
<input type="submit" name="cancel" value="cancel" />
</form>
</td>
</tr>
<tr class="highlight">
<td><input type="checkbox" name="res3" id="res3" value="2280" /></td>
<td>Bob Dole</td>
<td>111-222-4444</td>
<td><a href="product.php?sku=R8609" target="_self">Other item 6789</a></td>
<td>2/12/15</td>
<td>2/13/15</td>
<td></td>
<td align="center">
<form name="editForm" method="post" action="edit.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2280" />
<input type="submit" name="edit" value="edit" />
</form>
</td>
<td align="center">
<form name="returnForm" method="post" action="today2.php">
<input name="reservationID" type="hidden" value="2280" />
<input name="return" type="hidden" value="yes" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input type="submit" value="return" />
</form>
</td>
<td align="center">
<form name="cancelForm" method="post" action="cancel.php">
<input name="editFrom" type="hidden" value="today2.php" />
<input name="theDate" type="hidden" value="2015-02-12" />
<input name="reservationID" type="hidden" value="2280" />
<input type="submit" name="cancel" value="cancel" />
</form>
</td>
</tr>
<tr>
<td colspan="10">
<input type="submit" name="submit" id="submit" value="Pickup Selected Equipment" />
</td>
</tr>
</table>
</form>
答案 0 :(得分:3)
验证是因为XHTML 1.0的正式验证基于XML规则,而XML是SGML的一种强烈简化的修改,这是HTML 4.01名义上的基础。因此,在基于XML的DTD中描述的XHTML 1.0 的形式语法不禁止在所有HTML版本中禁止的某些功能(如嵌套表单)。 specification说明如下:
SGML为DTD的编写者提供了排除特定的能力 元素包含在元素中。这样的禁令 (称为“排除”)在XML中是不可能的。
例如,HTML 4 Strict DTD禁止嵌套'a' 任何后代深度的另一个'a'元素内的元素。它不是 可以用XML来说明这种禁令。即使这些 禁止在DTD中定义,某些元素不应该 嵌套。这些元素的摘要和不应该的元素 嵌套在它们中的可以在规范的元素禁令中找到。
而Element Prohibitions表示form
元素不得包含其他form
元素。
嵌套表单是不安全的。没有说明如果你这样做会发生什么。例如,未指定在提交外部表单时是否应包含内部表单上的字段。
因此,您应该考虑重构页面,以避免表单嵌套。如果您需要有关此方面的帮助,请考虑发布一个指定所需功能的新问题,并显示您最佳的重组尝试。