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

时间:2011-03-25 23:15:17

标签: html w3c

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

  

在HTML5之前,非块级元素(例如<input>)在<form>标记内无效。

我从来没有听说过这些内容,我看到的每个基本HTML教程似乎都可以将输入标签直接放在表单标签中。所以我的问题有三个部分:

  • 上述声明是否合法?
  • 为什么会这样? (它只是一个疏忽,还是HTML规范的创建者试图通过创建此规则来防止特定问题?)
  • 使用输入构建表单的推荐方法是什么? (我们是否应该直接在表单标记内创建div或表?)

4 个答案:

答案 0 :(得分:9)

这是标准的迂腐。

  • 就标准而言,该语句是合法的:在HTML 4.01中,definition for <form>指定它可能只包含块元素或<script>。至于世界上每个浏览器都允许的,没关系。
  • 我只能猜测他们认为<form>根本不是布局标签,他们希望所有内联元素都包含在一个块元素中。
  • 是的,您应该在<div>内放置<table><p><form>或其他一些块表示元素。

答案 1 :(得分:5)

以上陈述属实。在HTML中&lt; input&gt; tag不是&lt; form&gt;的有效元素标签。为了进行验证,您需要将&lt; input&gt;括起来。标记为&lt; fieldset&gt;或者&lt; div&gt;。这将在下面进行说明。

<form action="/" method="post">
    <fieldset>
        Field: <input type="text" name="field" />
        <br />
        <input type="submit" value="Submit" />
    </fieldset>
</form>

答案 2 :(得分:1)

首先,我想提一下,HTML教程教你做错事并不奇怪 - HTML实际上是为接受任何一种做事方式而设计的。你可以保留未封闭的标签,你可以不恰当地嵌套它们等等,这是我个人使用XHTML的原因之一。

这种说法似乎是正确的,但由于HTML的设计方式,在实践中并不重要。 XHTML可能禁止这样做。

表单实际上不是任何形式的容器。似乎HTML规范的创建者喜欢块级元素之类的东西,你应该将所有内容都包含在内。这只是我对它的看法,但据我所知,如果没有适当的容器,就不应该使用非块级元素。 这就像你不应该将非块级元素放在<blockquote>中。块级元素是其他元素的容器。

一个div,一个表 - 我认为即使是<p>也可以做到这一点。

答案 3 :(得分:0)

嗯,根据HTML 4.01规范(特别是section 17.3),这在技术上是正确的。但是,我不知道任何实际上会给你带来问题的网页浏览器。