我尝试在HTML validator中输入以下内容,但即使我使用“验证HTML片段”选项也无法验证:
<table>
<form action="foo">
<tr>
<td>tables + forms = BOOM</td>
</tr>
</form>
</table>
我认为我在这里要做的很清楚,但验证人似乎告诉我这是不允许的:(。
如果我想要一个表包含多个表单怎么办?我想有很多可能性如何将a分成几种形式,但至少允许tr和/或tbody成为形式的孩子似乎是合理的。
使用单独的表不会产生相同的效果,因为列宽可能不会相同。
答案 0 :(得分:2)
如您所见,<form>
元素只能完全出现在表格单元格(<td>
)中,或完全封装<table>
。你无法以任何其他方式验证; the HTML DTDs全部禁止将非表格元素作为<table>
或<tr>
中的第一级子元素。
也就是说,即使你没有验证,大多数浏览器也会理解你要做的事情。
答案 1 :(得分:1)
不幸的是,HTML4指定您不能直接在<form>
内添加<table>
,但您可以将表单作为<td>
的子项,也许可以尝试使用:
<table>
<tr>
<td>
<form action="foo">
td + form = SUCCESS!
</form>
</td>
</tr>
</table>
(在HTML5中仍然如此,其中<th>
可能只包含phrasing elements,而<form>
则归类为flow element。)
答案 2 :(得分:1)
看看,例如here在每种类型的元素可以包含的列表中。
表格很挑剔:它们只能包含caption?, ( col* | colgroup* ), (( thead?, tfoot?, tbody+ ) | ( tr+ ))
。
表单是“阻止内容”,因此您可以将其放在内容可以是“阻止”的任何位置,其中包括内容可以是“流”的任何位置,其中包括内部表格单元格:因此您可以将表单放入TD。