一个<form>标签能否放在<tr>标签内部是合法的吗?

5
以下是否为有效的HTML?我特别想知道<form>标签的位置是否正确。
<table>
    <form>
        <tr>
            <td>
                <input id="txt" type="text"></input>
            </td>
            <td>
                <input id="txt" type="text"></input>
            </td>
            <td>
                <input type="submit"></input>
            </td>
        </tr>
    </form>
</table>

1
我觉得这样在表格和表单之间加入表单有些不合逻辑。把整个表格都用表单包起来怎么样?=) - mauris
5个回答

11

1
我想给你100个赞,因为大多数开发人员都忽略了这种很棒的验证方式 :-( - bastianneu

8

这不是有效的。我猜你想要移除表单元素的默认填充。最好通过CSS来完成:

form {
    padding:0;
    margin:0;
}

或者

<form style="padding:0;margin:0;">

在 CSS 流行之前,很常见的做法就是去除默认表单填充。现在应该将表单标签放在表格外面。最好不要在这里使用表格,但这不是问题所在,所以我会放过它。 ;)


他可能只是想在一个表格中使用多个表单,跨越多行?他最好使用div来实现这个目的。 - Ivan Zlatanov
1
@Ivan - 应该使用Javascript来为隐藏表单分配值并提交,因为使用多个相同的表单没有意义,因为每页只能提交一个表单。他可以为行分配一个ID并使用它来标识它。 - Tor Valamo

3

这是无效的,TABLE 只能包含 TBODYTHEADTFOOTCAPTIONCOLCOLGROUP。如果您使用的是 XHTML,那么还可以在 table 中放置 tr


表格元素只能包含标题(caption)、列(col)、列组(colgroup)、主体(tbody)、头部(thead)和尾部(tfoot)这些子元素。(XHTML 还添加了 tr 元素到该列表中)。表头(th)元素是不可接受的。 - Quentin
我打错了TH,我已经修正并添加了所有其他元素(必须查看文档)。由于他没有指定使用的HTML版本,我还将TR添加到列表中 :) - Jan Hančič
1
显然,我的4分钟前的投票已经太旧了,除非问题被编辑...而它已经被编辑了。不过你仍然拼错了"TFOOTER",而且"TR"是不可接受的——因为XHTML是大小写敏感的;如果你添加了"tr",请同时提及XHTML条件。 - Quentin

2

编号。请参见:http://www.w3.org/TR/html4/struct/tables.html#edef-TABLE

<!ELEMENT TABLE - -
 (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)> 
<form> 元素可以出现在所有可以包含 block 内容的位置。因此,<form> 可以放置在 <body><blockquote><noscript>(奇怪的是也可以放在 <map> 中)。由于 block 也可以放在 flow 中,因此它也可以出现在 <div><ins><del><dd><li><td><th> 中。

1
表单和按钮中不能出现子表单,因为它们被明确排除在外:<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- 交互式表单 --><!ELEMENT BUTTON - - (%flow;)* -(A|%formctrl;|FORM|FIELDSET) -- 按钮 --> - Quentin
谢谢David - 这是我的疏忽。谢谢! - Roland Bouman

-3

这不是标准的HTML,但有时为了去除空行而这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接