为什么不允许在表单标签内直接使用输入标签?

9

我刚刚在 http://w3fools.com/#html_forms 上读到了以下内容:

非块级元素(如<input>)直接放在<form>标签中,在HTML5之前是不合法的。

我以前从未听说过任何类似的事情,而且我看过的每个基本HTML教程都似乎很好地将输入标签放在直接内部的表单标记中。 所以我的问题有三个方面:

  • 上述陈述是否合法?
  • 为什么会这样? (是否只是疏忽大意,还是HTML规范的创建者试图通过制定此规则来防止特定问题?)
  • 构建带有输入的表单的推荐方法是什么? (我们只需在表单标记中直接创建div或table吗?)

4
是的,表单元素的直接子元素必须是块级元素。请参考这里:http://vidasp.net/HTML-structure-diagram.html - Šime Vidas
4个回答

10

这是标准的一点小细节。

  • 就HTML 4.01标准而言,关于 <form> 的定义指定它只能包含块级元素或者 <script>。至于全球所有浏览器所允许的内容,那就没问题了。
  • 我猜他们认为 <form> 标签根本不是布局标签,他们希望所有内联元素都被包含在块级元素中。
  • 是的,你需要在 <form> 标签内放置一个 <div><table><p> 或其他块级表现元素。

1
对我来说,规范中的“表单元素充当控件的容器”以及“表单除了包含表单控件外还可以包含文本和标记(段落、列表等)”的描述十分奇怪,但是他们却不允许直接在表单中放置控件。 - StriplingWarrior

5
上述陈述是正确的。在HTML中,<input>标签不是<form>标签的有效元素。为了使其有效,您需要使用<fieldset>或<div>将<input>标签包含起来。下面是示例。
<form action="/" method="post">
    <fieldset>
        Field: <input type="text" name="field" />
        <br />
        <input type="submit" value="Submit" />
    </fieldset>
</form>

1
首先,我想提到的是,HTML教程教你做事情的方式并不令人惊讶——HTML实际上被设计成接受任何和所有的做事情的方式。你可以不关闭标签,可以不正确嵌套标签等等,这也是我个人使用XHTML的原因之一。
这种说法似乎是正确的,但由于HTML的设计方式,实际上并不重要。XHTML可能会禁止这样做。
表单并不是任何类型的容器。看起来HTML规范的创建者喜欢像块级元素一样将所有东西包装在里面。这只是我的看法,但据我注意,非块级元素不应该没有适当的容器而使用。
这就像你不应该在<blockquote>中放置非块级元素一样。块级元素是其他元素的容器。
一个div,一个table——我认为甚至一个<p>在这里都可以做到这一点。

0

根据HTML 4.01规范(特别是第17.3节),这在技术上是正确的。然而,我不知道有哪个网络浏览器会真正因此给您带来问题。


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