2010-08-18 76 views
0

我试过在HTML validator进入以下,但是失败了,即使我用了“验证HTML片段”选项验证:你可以使用合法的HTML来制作表格的一部分吗?

<table> 
    <form action="foo"> 
    <tr> 
     <td>tables + forms = BOOM</td> 
    </tr> 
    </form> 
</table> 

我想什么,我想在这里做的是相当清楚的,但验证程序似乎告诉我,这是不允许的:(。

如果我想单个表包含多个窗体怎么办?我想有很多可能性如何将窗体分成几种形式,但至少允许tr和/或tbody是儿童的形式似乎是合理的。

使用单独的表格不会产生相同的效果,因为列宽可能不会相同。

+0

为什么不使用多个表?每个表格一个? – 2010-08-18 23:46:28

回答

2

正如您所见,<form>元素只能完全出现在表格单元格中(<td>),或者完全封装了<table>。你无法以其他方式验证; the HTML DTDs都禁止非表格元素作为<table><tr>中的第一级子元素。

也就是说,即使不验证,大多数浏览器都会明白你要做什么。

+0

在这种情况下,浏览器不理解OP要做什么。 – Alohci 2010-08-19 00:06:44

+1

OP最初的担心是关于标记是否验证:浏览器愉快地接受非验证HTML,包括错误嵌套的标记。 – 2010-08-19 00:37:43

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

+0

如果你想输入多个单元格 – allyourcode 2010-08-20 08:50:33

1

看看例如here列出每种元素可以包含的内容。

表很繁琐:它们只能包含caption?, (col* | colgroup*), ((thead?, tfoot?, tbody+) | (tr+))

表单是'块内容',所以你可以把它放在任何其内容可以是'块'的地方,其中包括任何内容可以是'流'的地方,其中包括内部表单元格:所以你可以把一个表单内一个td。

+0

谢谢你的参考,这不起作用。你的第三段对于去混淆规范并没有太大的帮助,例如看看你用引号括住了多少单词。 – allyourcode 2010-08-20 08:52:16

+0

@allyourcode我没有试图解释规范,我试图总结它,或者提及/引用相关部分。 – ChrisW 2010-08-20 09:08:24

相关问题